欢迎来到 安卓源码空间!
安卓源码空间


                                                         如何在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



copyright@ 2020-2028  安卓源码空间网版权所有   

备案号:豫ICP备2023034476号-1号