作为 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 来完成,纯手动的方式有以下几个步骤:

  1. 修改 Makefile ,找到 LFLAGS 开始的那一行,去掉 -shared 和-Wl,-soname,xxx.so 这两个链接选项,这杨链接器就会生成可执行程序
  2. 修改 Makefile ,找到QMAKE_TARGET 和TARGET 开始的两行,把 " = " 后面的目标修改为你想要的那个名字,假定为 xxx
  3. 打开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 等),这里就展开了。我是自己写了个小程序,专用的,不通用,也不提了。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  3. android自定义访问权限permission
  4. 让Android程序获得系统权限,实现关机重启,静默安装等功能
  5. Android底层库和程序
  6. 读oschina android 开源app代码 - 笔记。
  7. Android(安卓)4.0 SDK的离线方式安装
  8. OSG 坑爹的Android(安卓)example
  9. 十大免费移动程序测试框架(Android/iOS)

随机推荐

  1. Android:PopupWindow简单弹窗改进版
  2. 【Android】使用v7.widget.GridLayout做
  3. Android实用技巧之adb命令:ADB命令大全
  4. Android使用gradle的管理本地Maven服务器
  5. Google市场推广统计
  6. 《第一行代码Android》学习总结第八章 使
  7. ListView中Button的点击事件冲突
  8. Android(安卓)自定义弹窗提示
  9. [android UI]自定义各种UI,收集在此,以备后
  10. android网络打印 生成pdf