如何在Android系统上运行C++程序
一、前言
有两种方式:
使用 NDK,通过 JNI 的方式来调用 C++ 的方法。这部分知识点很多,可以参考:Android NDK 从入门到精通(汇总篇)
Android 的本质是基于 Linux 系统的,我们是可以直接运行 C++ 的程序关于第二点,是需要我们有 root 权限的。但是它也是很方便的,例如有一个 C++ 的 SDK,需要运行在 Android 系统上测试,直接编写一个可执行程序在手机上运行,比写一个 APP 是方便和快捷很多的。
二、如何直接运行 C++ 的程序
首先你需要下载 NDK 的开发包使用 NDK 编译生成在 Android 系统上可运行的执行程序把编译好的可执行程序丢到手机的 “/data/local/tmp” 目录下(其它一些目录也是可以的,只要能够执行)。
给可执行程序添加执行权限(chmod +x 命令),然后直接执行就可以了。
针对有 root 权限的开发板或者手机,需要保证能把文件push到 /data/local/tmp 下。
三、怎么做
我们就以 HelloWorld 为例来实现吧。
1. 首先编写一个 HelloWorld.cpp 如下:
#include <iostream>
using namespace std;
int main() {
cout << "Hello World" << endl;
return 0;
}
2. 你们电脑需要装好 arm-linux-androideabi-g++ 的环境
这个需要你先将 NDK 的工具链生成并配置到环境变量中去。
关于如何配置 NDK 工具链的环境,可以参考这篇博客:NDK工具链的生成和配置
3. 执行如下语句
arm-linux-androideabi-g++ -std=c++11 -pie -fPIE -o HelloWorld HelloWorld.cpp
解释:
-std=c++11 指定使用 C++11
-pie 不配置的话会出现如下错误:
“HelloWorld”: error: Android 5.0 and later only support position-independent executables (-fPIE).
-o 是指定编译生成的文件名
HelloWorld 是指定生成的可执行文件名,随便取都行
HelloWorld.cpp 是需要编译的源代码
4. 将生成的可执行程序 push 到手机中并执行
5. 当然我们也可以写一个 .sh 来一键化操作,例如
arm-linux-androideabi-g++ -std=c++11 -pie -fPIE -o HelloWorld HelloWorld.cpp
adb root
adb remount
adb push HelloWorld /data/local/tmp
(实际应用中可以你还需要 push 很多其他文件,例如 .a 、.so、图片等等,所以写个脚本操作复用性好一些)
四、扩展
当然实际应用中我们的测试程序肯定不会这么简单,他还会包含很多其他的头文件、静态库动态库等等,所以我们的编译语句可能是如下这样的:
arm-linux-androideabi-g++ -I include -std=c++11 -pie -fPIE -o UnitTest test.cpp lib/xxx.so lib/xxx.so lib/xxx.a ...
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/afei__/article/details/80719691