Qt for Android 部署流程分析
原地址: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 。内容如下:
- {
- "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"
- }
{
"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 到设备上运行。大概步骤是这样的:
- 创建构建目录
- 拷贝 application-binary
- 拷贝 Qt 自己的库和依赖的库,如 libgnustl_shared.so 等。
- 根据模板拷贝 java 文件、生成 AndroidManifest.xml 、资源文件等等
- 调用 ant 编译、打包、签名、对齐
- 连接设备,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 还不行,这个我还没有研究。
Qt for Android 部署流程分析的更多相关文章
- 【转】android SystemUI 流程分析
android4 SystemUI 流程分析 什么是SystemUI? 对于Phone来说SystemUI指的是:StatusBar(状态栏).NavigationBar(导航栏).而对于Tablet ...
- Android 启动流程分析
原文:https://www.jianshu.com/p/a5532ecc8377 作者曾经在高通的Android性能组工作,主要工作是优化Android Application的启动时间. APP基 ...
- Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示
Android 系统版本号非常多,较新的 4.4 ,较老的 2.3 ,都有人用. Qt on Android 开发的 Android 应用.默认在 Android 设备上是非全屏的. 而有些应用的需求 ...
- 《Qt on Android核心编程》夹
china-pub在售前,售中环节退房,折扣低! 有朋友想看看<Qt on Android核心编程>的文件夹,So-- 文件夹 <Qt on Android核心编程>文 ...
- Qt on Android: Android SDK安装
之前我在 <Windows下Qt 5.2 for Android开发入门>一文中介绍了 Windows 下 Qt on Android 开发环境的搭建,略过了 Android SDK 的安 ...
- Qt on Android:将Qt调试信息输出到logcat中
版权全部 foruok .如需转载敬请注明出处(http://blog.csdn.net/foruok). 假设你在目标 Android 设备上执行了 Qt on Android 应用,你可能希望看到 ...
- Qt on Android:资源文件系统qrc与assets
使用 Qt 为 Android 开发应用时,有时我们的应用会携带一些资源文件,如 png . jpg 等,也可能有一些配置文件,如 xml 等.这些文件放在哪里呢? 有两种方式: qrc assets ...
- Qt on Android: http下载与Json解析
百度提供有查询 ip 归属地的开放接口,当你在搜索框中输入一个 ip 地址进行搜索,就会打开由 ip138 提供的百度框应用,你能够在框内直接输入 ip 地址查询.我查看了页面请求,提取出查询 ip ...
- Android平台APK分析工具包androguard的部署使用和原理分析
原创文章,转载请注明出处,谢谢. Android应用程序分析主要有静态分析和动态分析两种,常见的静态分析工具是Apktool.dex2jar以及jdgui.今天突然主要到Google code上有个叫 ...
随机推荐
- hdu 1232 畅通project
题目: 链接:点击打开链接 算法: 赤裸裸的并查集. 代码: #include<iostream> #include<cstdio> #include<cstring&g ...
- 探索Android中的Parcel机制(上)
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...
- Java 输出通过 InetAddress 获得的 IP 地址数组
使用 InetAddress 获取 IP 地址会得到一个 byte 数组 如果你直接输出这个数组,你会发现 IP 地址中的某些位变成了负数 比如 61.135.169.105 会输出成 61.-121 ...
- NYIST 914Yougth的最大化【二分搜索/Dinkelbach算法】
转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187637.html 题目链接:http://acm.nyist.net/JudgeOnline/p ...
- zIndex属性在IE中无效
在ie中他的子类的zindex就以父类为准: <!doctype html> <html> <head> <meta charset="utf-8& ...
- BAAS
http://blogs.embarcadero.com/sarinadupont/category/baas-tutorials/?cid=701G0000000vH0A&elq=51f98 ...
- Microsoft Visual Studio 发展历史
Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品.VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具. ...
- 我对国内两大购书站点的感受(dearbook和china-pub)
我在china-pub和dearbook都是老用户了(china-pub五星,dearbook钻石VIP).说一下近来我对两个站点的感觉. 1. Dearbook和当当合作以后送货速度比china-p ...
- linux定时调度器每秒运行一次
linux操作系统最小粒度的定时调度器仅仅能调到分钟的级别,工作中有时需在到秒的调度,所以须要自己编写脚本来实现 #!/bin/bash while [ true ]; do /bin/sleep 1 ...
- stm32之ADC
将模拟量转换为数字量的过程称为模式(A/D)转换,完成这一转换的期间成为模数转换器(简称ADC);将数字量转换为模拟量的过程为数模(D/A)转换,完成这一转换的器件称为数模转换器(简称DAC). 模拟 ...