如何在Android手机上运行C++程序

一、背景介绍

    项目开发中,假设有一个 C++ 的 SDK,需要运行在 Android 系统上,可能我们需要先写一个测试程序来测试这个 SDK 的接口是否能够在手机上正常执行,可是写一个 Android 程序(还需要写JNI),就比较复杂了。那么比较快的做法是直接写一个可执行程序在手机上运行,这样你不仅不用写任何界面,甚至连 Android 和 JNI 都不用懂就可以测试了。

    这样做的好处还有一个,就是完全脱离了页面,对于测试 SDK 接口内存很方便。


二、如何实现

  1. 首先你需要下载 NDK 的开发包
  2. 使用 NDK 编译生成在 Android 系统上可运行的执行程序
  3. 把编译好的可执行程序丢到手机目录下,然后直接执行就可以了。


三、怎么做

    我们就以 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 /system/bin


四、扩展

    当然实际应用中我们的测试程序肯定不会这么简单,他还会包含很多其他的头文件、静态库动态库等等,所以我们的编译语句可能是如下这样的:

arm-linux-androideabi-g++ -I include -std=c++11 -pie -fPIE -o UnitTest test.cpp lib/xxx.so lib/xxx.so lib/xxx.a ...

猜你喜欢

转载自blog.csdn.net/afei__/article/details/80719691