c400c25a956fa6386bf6463305c789e4.gif

本发明涉及一种Android系统,特别涉及一种在Android上编译Qt出框架的方法。

背景技术:

Android系统经过十年的发展,功能已经非常成熟和完善。然而其功能完善的代价就是对存储资源的巨大消耗。在一些存储资源紧张的硬件平台上,Android系统的运行表现不尽人意,甚至无法运行。因此,在裁剪的Android系统上运行Qt是一种巧妙的解决方案。但是,Android和Qt是两个独立的框架,同时他们拥有各自的编译系统,如果希望在Android上编译Qt出框架,现有技术中,还没有一种现成的解决方法。

技术实现要素:

本发明要解决的技术问题,在于提供一种可运行在Android系统上的Qt库的生成方法,利用Android的编译系统,编译出qmake,然后利用qmake再编译出Qt库,从而轻松地在Android系统上生成Qt库。

本发明是这样实现的:一种可运行在Android系统上的Qt库的生成方法,包括:

步骤S1、复制Qt框架源码到Android源码中;

步骤S2、创建用于编译qmake的AndroidMakefile文件qmake.mk,编译qmake可执行文件;

步骤S3、创建利用qmake可执行文件编译Qt库的Android.mk文件,编译Qt库并生成到Android的system文件系统中。

进一步的,所述步骤S1具体是:下载谷歌AOSP源代码,在谷歌AOSP源代码中创建Qt文件夹,作为Qt框架源码和相关编译文件的宿主文件夹;然后再下载Qtbase源代码到Qt文件夹中。

进一步的,所述步骤S2具体是:

步骤S21、在Qt文件夹中创建qmake及其附属编译工具的编译规则文件qmake.mk;

步骤S22、定义AOSP编译系统所需的模块名为qmake;定义qmake模块的分类为可执行文件;定义qmake模块为HOST模块;定义qmake模块的依赖关系;进入Qt/Qtbase文件夹;执行configure命令,编译出qmake可执行文件;

步骤S23、在Qt/Qtbase/src/tools/文件夹中遍历附属编译工具,生成编译信息,执行make命令,进而编译出qmake附属编译工具;

步骤S24、上述编译配置生成的qmake可执行文件存放在Qt/Qtbase/bin/文件夹下,修改AOSP编译系统定义的qmake目标文件,添加echo"#!/bin/sh"和exec$(pwd)/Qt/Qtbase/bin/qmake'$@',以保证AOSP编译系统能正确找到qmake可执行文件。

进一步的,所述步骤S22中,定义qmake模块的依赖关系是定义qmake依赖的动态链接库,该动态链接库包括libEGL,libicuuc,libicui18n,libm,libgui,liblog,libstdc++,libbinder,libstlport,libGLESv1_CM,libGLESv2,$(TARGET_CRTBEGIN_SO_O),$(TARGET_CRTBEGIN_DYNAMIC_O),$(TARGET_CRTEND_SO_O),$(TARGET_CRTEND_O)$(TARGET_LIBGCC),以上动态链接库记为依赖库1,通过$(LOCAL_BUILT_MODULE):依赖库1表示。

进一步的,步骤S22中的编译qmake可执行文件的configure命令参数包括:-xplatform unsupported/android-g++,-opensource-confirm-license,-no-accessibility,-prefix/system/。

进一步的,所述步骤S3具体是:

步骤S31、创建Qt库的编译规则文件Android.mk;

步骤S32、定义编译系统所需的模块名为具体的Qt库名称;定义libQtCore模块的分类为动态链接库;定义libQtCore模块的源代码路径;定义libQtCore模块的最终文件名;定义libQtCore模块的依赖关系;定义qmake路径;编译libQtCoree库;

步骤S33、AOSP编译系统将libQtCore库安装到可供AOSP编译系统使用的库文件夹中,完成可运行在Android上的Qt库的生成过程。

进一步的,所述步骤S32中,定义libQtCore模块的依赖关系具体是:libEGL,libicuuc,libicui18n,libgui,liblog,libstdc++,libm,libstlport,libGLESv1_CM,libGLESv2;以上动态链接库记为依赖库2,通过$(LOCAL_BUILT_MODULE):依赖库2表示。

进一步的,所述步骤S32中,编译libQtCore的过程具体是:

(1)创建AOSP编译系统需要的中间文件的目录;

(2)进入libQtCore模块的源代码目录;

(3)执行qmake可执行文件,生成libQtCore模块的makefile;

(4)执行make命令,编译出libQtCore库;

(5)将编译出的libQtCore库拷贝到所述AOSP编译系统需要的中间文件的目录。

本发明具有如下优点:本发明方法是利用Android的编译系统,编译出qmake,然后利用qmake再编译出Qt库的过程,可在Android系统上运行,能够在原有Android SDK基础上,快速移植Qt框架,从而利用大量的现有Qt应用节约开发成本,同时能够节约大量的系统资源,以保证入门级设备的流畅运行。

附图说明

下面参照附图结合实施例对本发明作进一步的说明。

图1为本发明方法执行流程图。

具体实施方式

请参阅图1所示,本发明Qt库的生成方法的总体思路是利用Android的编译系统,编译出qmake,然后利用qmake再编译出Qt库,为了支持在Android中编译Qt库,最核心的是桥接Android的编译系统和Qt的qmake编译系统。本发明方法包括:

步骤S1、复制Qt框架源码到Android源码中;在互联网上下载谷歌AOSP源代码(网址https://source.android.com/setup/downloading),在谷歌AOSP源代码中创建Qt文件夹,作为Qt框架源码和相关编译文件的宿主文件夹;然后再从https://github.com/qt/qtbase下载Qtbase源代码到Qt文件夹中。

步骤S2、创建用于编译qmake的AndroidMakefile文件qmake.mk,编译qmake可执行文件;即创建qmake在Android下的编译规则,使得AOSP源代码能编译出qmake及其附属编译工具,具体是:

步骤S21、在Qt文件夹中创建qmake及其附属编译工具的编译规则文件qmake.mk;

步骤S22、定义如下信息,以实现在AOSP源代码中编译出qmake的目的:

1)定义AOSP编译系统所需的模块名为qmake,LOCAL_MODULE:=qmake;

2)定义qmake模块的分类为可执行文件,LOCAL_MODULE_CLASS:=EXECUTABLES;

3)定义qmake模块为HOST模块,即只用于编译主机使用,

LOCAL_IS_HOST_MODULE:=true,LOCAL_MODULE_SUFFIX:=

$(HOST_EXECUTABLE_SUFFIX),include

$(BUILD_SYSTEM)/binary.mk;

4)定义qmake模块的依赖关系,以便编译系统能够根据依赖关系顺利编译出qmake可执行文件;编译qmake可执行文件时,进入Qt/Qtbase文件夹;执行configure命令,编译出qmake可执行文件;

其中,定义qmake模块的依赖关系是定义qmake依赖的动态链接库,该动态链接库包括:

libEGL,libicuuc,libicui18n,libm,libgui,liblog,libstdc++,libbinder,libstlport,libGLESv1_CM,libGLESv2,$(TARGET_CRTBEGIN_SO_O),$(TARGET_CRTBEGIN_DYNAMIC_O),$(TARGET_CRTEND_SO_O),$(TARGET_CRTEND_O)$(TARGET_LIBGCC);

以上动态链接库记为依赖库1,通过$(LOCAL_BUILT_MODULE):依赖库1表示。

所述configure命令的参数包括:-xplatform unsupported/android-g++,-opensource-confirm-license,-no-accessibility,-prefix/system/。

步骤S23、在Qt/Qtbase/src/tools/文件夹中遍历附属编译工具,步骤包括:进入qt/qtbase/src/tools/文件夹;执行../../bin/qmake-r来自动递归遍历上述文件夹中的附属编译工具,并生成编译信息;生成编译信息,执行make命令,进而编译出qmake附属编译工具;

步骤S24、上述编译配置生成的qmake可执行文件存放在Qt/Qtbase/bin/文件夹下,无法被AOSP编译系统直接找到,需要通过以下步骤解决:修改AOSP编译系统定义的qmake目标文件,添加echo"#!/bin/sh"和exec$(pwd)/Qt/Qtbase/bin/qmake'$@',以保证AOSP编译系统能正确找到qmake可执行文件。

步骤S3、创建利用qmake可执行文件编译Qt库的Android.mk文件,编译Qt库并生成到Android的system文件系统中。具体是:

步骤S31、创建Qt库的编译规则文件Android.mk;

步骤S32、定义如下信息,以实现在AOSP编译系统中编译出qt库的目的:

1)定义编译系统所需的模块名为具体的Qt库名称,以libQtCore为例子,LOCAL_MODULE:=libQtCore;

2)定义libQtCore模块的分类为动态链接库,LOCAL_MODULE_CLASS:=SHARED_LIBRARIES;

3)定义libQtCore模块的源代码路径,QT_MODULE_SOURCE:=qt/qtbase/src/corelib;

4)定义libQtCore模块的最终文件名,QT_BUILT_MODULE:=qt/qtbase/lib/libQtCore.so.5.0.0;

5)定义libQtCore模块的依赖关系,以便编译系统能够根据依赖关系顺利编译出libQtCore库;

定义libQtCore模块的依赖关系具体是:libEGL,libicuuc,libicui18n,libgui,liblog,libstdc++,libm,libstlport,libGLESv1_CM,libGLESv2;以上动态链接库记为依赖库2,通过$(LOCAL_BUILT_MODULE):依赖库2表示。

6)定义qmake路径,QMAKE:=$(abspath out/host/linux-x86/bin/qmake);

7)编译libQtCore库,具体过程是:

(1)创建AOSP编译系统需要的中间文件的目录;

(2)进入libQtCore模块的源代码目录;

(3)执行qmake可执行文件,生成libQtCore模块的makefile;

(4)执行make命令,编译出libQtCore库,Make命令是程序编译的通用工具;

(5)将编译出的libQtCore库拷贝到所述AOSP编译系统需要的中间文件的目录。

步骤S33、AOSP编译系统将libQtCore库安装到可供AOSP编译系统使用的库文件夹中,完成可运行在Android上的Qt库的生成过程。

本发明具有如下优点:可在Android系统上运行,能够在原有Android SDK基础上,快速移植Qt框架,从而利用大量的现有Qt应用节约开发成本,同时能够节约大量的系统资源,以保证入门级设备的流畅运行。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐