qt 编译成apk_关于QT生成Android编译、运行流程

一、编译时生成json文件。

这个文件存在于编译路径下面,类似于“android-libuntitled1.so-deployment-settings.json”,其中libuntitled1.so是项目编译生成的so文件。

{

"description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",

"qt": "E:/QT/Qt5.9.0/5.9/android_armv7",

"sdk": "E:/Android/Android/android-sdk",

"sdkBuildToolsRevision": "build-tools-23.0.1",

"ndk": "E:\\Android\\Android\\android-ndk-r10e",

"toolchain-prefix": "arm-linux-androideabi",

"tool-prefix": "arm-linux-androideabi",

"toolchain-version": "4.9",

"ndk-host": "windows-x86_64",

"target-architecture": "armeabi-v7a",

"qml-root-path": "E:/QT/Qt_test/untitled1",

"application-binary": "E:/QT/Qt_test/build-untitled1-Android_for_armeabi_v7a_GCC_4_9_Qt_5_9_0_for_Android_armv7- Debug/libuntitled1.so"

}

主要涉及到qt版本、使用的skd、ndk的路径和相关版本说明,最后是application-binary指向项目的so文件。

二、生成APK

单纯的编译只会生成so和json,不做其他事情。

运行选择对应的Android设备后,才会执行一系列动作生成APK,push到设备。

下面动作都由androiddeployqt.exe 程序完成,可以在 Qt Creator 的输出 panel 中看到 这个部署程序的输出信息。

创建构建目录

拷贝 application-binary

拷贝 Qt 自己的库和依赖的库,如 libgnustl_shared.so 等。

根据模板拷贝 java 文件、生成 AndroidManifest.xml 、资源文件等等

调用 ant 编译、打包、签名、对齐

连接设备,install APK 并运行

如果在项目中需要加载其他的第三方库,在.pro中加入 LIBS += -lxxx进行调用之后,Android的构建中,还需要去增加依赖库选项。

我使用的5.9.0版本的QT,在项目-》构建-》Build Android APK-》Additional Libraries中进行添加。添加后在构建运行时会正确打包。

Android运行之后,E:\QT\Qt_test\build-untitled1-Android_for_armeabi_v7a_GCC_4_9_Qt_5_9_0_for_Android_armv7-Debug\android-build\bin会生成QtApp-debug.apk文件,这个apk文件即可用于发布。

三、启动流程

1、执行程序的入口在构建目录下android-build\src\org\qtproject\qt5\android\bindings\QtActivity.java中,会检查应用需要的库文件、扩展包、插件等是否存在,如果不存在可以通过ministro服务进行下载(需要选择"Use Ministro service to install Qt",下载前会检查ministro的状态);另外ministro这个本身也是通过配置来调用,如果选择"Bundle Qt libraries in APK"这个配置,则打包时会将所需要的库文件全部打包。

2、QtActivity.java中会调用QApplication.java的接口来启动app的线程;

3、这个线程会将lib**.so中main函数入口以库函数接口的形式再次执行,这样就相当于qt可执行程序的执行

启动流程这个还是觉得不爱透彻,希望有了解的朋友跟我说说。谢谢O(∩_∩)O

参考:https://blog.csdn.net/foruok/article/details/17796017


版权声明:本文为weixin_31960145原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。