qt for android怎么打包,Qt for Android 编译安卓原生可执行程序

这篇博客介绍了如何在不使用JNI的情况下,通过Qt for Android在安卓设备上运行C/C++编译的可执行程序。主要步骤包括修改Makefile以去除生成动态库的选项,指定目标文件名,并通过QtCreator的构建步骤自动化修改过程。这种方式避免了Java虚拟机对内存的限制,使得原生程序能独立控制内存。此外,还提供了一种自定义构建步骤来自动修改Makefile,以便于项目维护。
摘要由CSDN通过智能技术生成

作为 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 时应用修改,最终生成可执行文件。下图是我的一个工程的配置:

122512_0.jpg

至于怎么自动修改 Makefile ,可以使用一些开源的文本工具(如 sed for windows 等),这里就展开了。我是自己写了个小程序,专用的,不通用,也不提了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值