关于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

转载于:https://www.cnblogs.com/warmSnowFY/p/9529765.html

你可能感兴趣的:(关于QT生成Android编译、运行流程)