原地址:http://blog.csdn.net/foruok/article/details/17796017

今天为了测试使用 Qt Creator 3.0.0 开发的纯 C 工程,利用了 Windows 下 Qt 5.2 for Android 开发入门里创建的 HelloAndroid 工程,想把纯 C 工程生成的 so 库加到 HelloAndroid 工程中。结果加入进去了,但不会自动拷贝到生成目录打包进 APK 。

研究了一个小时,大体搞明白了 Qt Creator 生成 APK 的流程。

首先 Qt Creator 会编译时会生成一个 json 文件,就在工程目录下,我的是 android-libhelloAndroid.so-deployment-settings.json 。内容如下:

[cpp] view plaincopyprint?
  1. {
  2. "description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",
  3. "qt": "C:\\Qt\\Qt5.2.0\\5.2.0\\android_armv7",
  4. "sdk": "E:/android-sdk-windows",
  5. "ndk": "E:\\Android\\android-ndk-r8d",
  6. "toolchain-prefix": "arm-linux-androideabi",
  7. "tool-prefix": "arm-linux-androideabi",
  8. "toolchain-version": "4.7",
  9. "ndk-host": "windows",
  10. "target-architecture": "armeabi-v7a",
  11. "android-extra-libs": "libhttpclient_test.so",
  12. "application-binary": "E:/qt/helloAndroid/libhelloAndroid.so"
  13. }
{"description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.","qt": "C:\\Qt\\Qt5.2.0\\5.2.0\\android_armv7","sdk": "E:/android-sdk-windows","ndk": "E:\\Android\\android-ndk-r8d","toolchain-prefix": "arm-linux-androideabi","tool-prefix": "arm-linux-androideabi","toolchain-version": "4.7","ndk-host": "windows","target-architecture": "armeabi-v7a","android-extra-libs": "libhttpclient_test.so","application-binary": "E:/qt/helloAndroid/libhelloAndroid.so"
}

上面文件里的 application-binary ,实际上是一个 so 文件,在我这里是 libhelloAndroid.so 。

要说明的是,编译阶段只会生成 so 文件,什么事情不干。当你运行时,选择了 Android 设备,Qt Creator 才开始执行一系列动作来生成 APK ,并 push 到设备上运行。大概步骤是这样的:

  1. 创建构建目录
  2. 拷贝 application-binary
  3. 拷贝 Qt 自己的库和依赖的库,如 libgnustl_shared.so 等。
  4. 根据模板拷贝 java 文件、生成 AndroidManifest.xml 、资源文件等等
  5. 调用 ant 编译、打包、签名、对齐
  6. 连接设备,install APK 并运行

这些动作都是由一个名为 androiddeployqt.exe 的程序完成的,感兴趣的可以看它的源码,Qt SDK 里有,同时也可以在 Qt Creator 的输出 panel 中看到 这个部署程序的输出信息。更详细的过程可以参考 Qt 官方文档 Deploying Applications to Android Devices,那里面说得很详细。

说说我遇到的问题。我在 pro 文件里使用 LIBS += -lxxx 加入了我的 C 库,编译通过,可是 androiddeployqt 没有拷贝 libxxx.so ,APK 运行时找不到依赖的 libxxx.so 直接挂掉了。这个问题的解决,只要添加一个额外的依赖库就可以了,Qt Creator 会传递参数给 androiddeployqt ,后者就会正确打包。

在 Qt Creator 中,选则 Projects > Run > Deploy configurations > Details ,可以看到下面的界面:

看图片上画蓝线、篮圈的地方,就是这里,添加你依赖的库即可。

好啦,到这里我们可以在纯粹 C++ 的 IDE 当中进行 Android 的开发了,带界面的、不带界面的,都可以完成。不过貌似 service 还不行,这个我还没有研究。

转载于:https://www.cnblogs.com/lanye/p/3534037.html

Qt for Android 部署流程分析相关推荐

  1. Android系统启动流程分析之安装应用

    2016六月 21 原 Android系统启动流程分析之安装应用 分类:Android系统源码研究 (295)  (0)  举报  收藏 跟随上一篇博客Android系统的启动流程简要分析继续分析an ...

  2. 【android系统】android系统升级流程分析(二)---update升级包分析

    接下来我们将通过几篇文章来分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.今天让我先来分析下升级包update.zip. 一 ...

  3. 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析

    今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...

  4. android SystemUI 流程分析

    android4 SystemUI 流程分析 什么是SystemUI? 对于Phone来说SystemUI指的是:StatusBar(状态栏).NavigationBar(导航栏).而对于Tablet ...

  5. Android FM流程分析

    一,FM主要类介绍 FmMainActivity.java 主界面 FmService.java  核心 FmNative.java  调用JNI和底层通信 二,FM主要功能介绍 1,收音播放: 1 ...

  6. android serviceconnection unbind流程,Android unbindService 流程分析

    基于Android 6.0的源码剖析, 分析bind service的启动流程. /frameworks/base/core/java/android/app/ContextImpl.java /fr ...

  7. Android Gallery2流程分析

    Android 系统的多媒体数据provider packages/providers/MediaProvider/ 含有类MediaProvider.java.MediaScannerService ...

  8. Android画面显示流程分析(1)

    1. 前言 本文尝试从硬件认识开始介绍Android的显示系统是如何更新画面的,希望能就android系统是如何更新画面的问题,给读者带来一个感性认知.文中将尝试解释从App画出一帧画面到这帧画面是如 ...

  9. Android otapackage流程分析三

    我们来看下增量升级包流程: 为了能够详细一点说明我这边是弄了几个不同的文件替换然后很好的分析,增量升级包制作要手动执行脚本 例如: ./build/tools/releasetools/ota_fro ...

最新文章

  1. C++ sort()函数的cmp含义
  2. 从“IBM刀片服务器广告告别电视”说起
  3. Linux基础:Shell脚本学习
  4. lbp7660cdn设置网络打印_一篇文章弄懂局域网打印机共享
  5. Oracle SQL语句大全(二)
  6. 对校招生培养工作的建议_如何提升人才培养质量?西华的老师们正面临一场大考...
  7. [leetcode] 144.二叉树的前序遍历
  8. 2022年考研计算机-数据库原理8-11章
  9. 2.jenkins 新建一个任务
  10. Maven打包三种方法和常用命令大全
  11. 螺母_常用硬件的种类以及选用_day15
  12. 基于anbox的云游戏技术简介
  13. 大数据早报:极课大数据获得1亿元融资 美科学家利用机器学习挖出人们背后的自杀行为(11.1)
  14. 铀球(235U)的临界半径计算(1d,S8)
  15. svg的学习笔记《一》:如何使用svg sprite
  16. royal tsx连接闪退_Royal TSX for Mac(最强远程管理软件)
  17. 小程序(十)签到业务流程分析
  18. 路由器什么牌子好?消灭卡顿畅快吃鸡
  19. VScode任务栏图标异常
  20. 云服务器CentOS永久更改主机名

热门文章

  1. Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)
  2. swift项目 9.3以前版本模拟器运行出错
  3. 什么是线程死锁?如何解决?(蚂蚁金服面试题)
  4. Learn CMake's Scripting Language in 15 Minutes (ZZ)
  5. 视频直播技术(二):延迟优化
  6. 原创:Spring整合junit测试框架(简易教程 基于myeclipse,不需要麻烦的导包)
  7. 十二生肖swift1.2
  8. java枚举类型转换为Struts2的select的数据
  9. chrome 插件下载
  10. 前端性能优化的重要方案:图片懒加载