作为 C/C++ 程序员,有时候我们希望在安卓上运行从 C/C++ 生成的可执行程序,而不是在 Java 中通过 jni 的方式来调用 C 动态库。有两个途径可以达到这个目的:一个是使用安卓 NDK 提供的工具链直接编译 C 代码(其中又有两种方式,使用 android 的 mk 文件,使用自己编写的 Makefile );一个是使用 Qt 5.2 for Android ,Qt Creator 可以生成安卓版本。这里我们说 Qt for Android,不说 NDK 方式。
Qt for Android 的环境搭建,可以参考我之前的博文《Windows下Qt 5.2 for Android开发入门》。
一旦你生成了一个项目,配置好了工具链,就可以在 Qt Creator 的项目标签中选择安卓版本进行编译。不过默认编译出来的是动态库, so 文件。而我们想要可执行程序。这个可以通过修改 Makefile 来完成,纯手动的方式有以下几个步骤:
- 修改 Makefile ,找到 LFLAGS 开始的那一行,去掉 -shared 和-Wl,-soname,xxx.so 这两个链接选项,这杨链接器就会生成可执行程序
- 修改 Makefile ,找到QMAKE_TARGET 和TARGET 开始的两行,把 " = " 后面的目标修改为你想要的那个名字,假定为 xxx
- 打开Qt 5.2.0 for Desktop (MinGW 4.8 32 bit) ,进入你的安卓编译目录,执行 mingw32-make ,可以看见, xxx 生成了
使用原生程序比使用 APK + JNI 方式会有一个好处: Java 虚拟机无法控制原生程序占用的内存,而 APK + JNI 的方式, C 代码和 Java 代码共享整个 Java 虚拟机的内存, C 代码会受到虚拟机内存大小的限制。
如果嫌上面的步骤麻烦(每次 Qt 工程变化都要手动修改 Makefile ,比如往添加了文件等),可以在 Qt Creator 中给工程添加一个构建步骤(自动修改 Makefile ),顺序放在 qmake 之后,这样每次 qmake 生成了 Makefile ,自定义的构建步骤就会自动执行来修改 Makefile ,在 make 时应用修改,最终生成可执行文件。下图是我的一个工程的配置:
至于怎么自动修改 Makefile ,可以使用一些开源的文本工具(如 sed for windows 等),这里就展开了。我是自己写了个小程序,专用的,不通用,也不提了。
分享到:
相关推荐
这是Qt for Android的测试工程,主要测试QT的触摸手势事件
Qt for android 动态权限申请工具类
qt for android 更新APP, 可以实现在app里更新自己 实现更新。
Qt for Android简单示例
详细描述了qt for android 编译、打包成apk的方法
使用Qt for android调用原生系统的摄像头来录取设备,稳定高效,使用于安卓7.0版本及以上,测试在魅族5.0会后台死掉,但是录像会成功
QT for Android下多个 Service的创建启动,包括Service通过Jni外调QT信号槽实现,对研究QT在安卓下的跨平台开发很有帮助
QT FOR ANDROID 配置
Qt最大的优势就是跨平台,一次性开发的Qt应用程序,可以跑Windows、跑linux、跑MAC……如今移动平台android操作系统如此火爆,Qt当然不能放过对android的支持,对了,还有iphone/ipad。而且,c++开发者们,想做...
qtfor windows 编译qtdbus
Qt 5.15.2基于Android 开发环境搭建,包含Qt5.15.2的在线安装与配置,包含JDK 1.8 Android Studio 4.1.3 Openssl 插件的安装配置以及其资源包下载路径,亲测可用,非常详细。汪采纳!
使用Qt for Android 和 QML开发的短信程序,使用JNI的方式在Qt端调用JAVA、以及JAVA端回调Qt端的方式。
FFMPEG开发QTonAndroid的工程(QT5.12),附带FFMPEG库,可以直接编译到Android设备进行开发。 FFMPEG使用NDK_R19C编译。 这是一个简单的DEMO工程,可以直接使用QT打开,编译部署到Android设备运行。 注意: 这个工程...
Qt for Android实现自动更新app,安装apk文件,qml自动更新 通过调用修改Java函数来实现对私有数据的读写
Qt for Android 配置详细 (Windows下的),参考之用
qt调用c语言代码(c语言的代码写在c文件中)
资源中的打开相机和相册均是原生Java代码实现,在我自己手机和安卓7.0版本上面稳定可靠,测试在魅族5.0版本左右打开相机会死掉,由Qt调用,demo可学习Qt如何与原生Java的交互通信,代码均有注释,里面还有微信等接口...
Qt for Android 需要的文件Ministro II.apk
在window下编译qt,解决qt编译的一些其他问题
qt for android 版本5.4重力感应官方源码 希望有用