如何在Android系统上运行C++程序

29 篇文章 11 订阅

一、前言

有两种方式:

  1. 使用 NDK,通过 JNI 的方式来调用 C++ 的方法。这部分知识点很多,可以参考:Android NDK 从入门到精通(汇总篇)
  2. Android 的本质是基于 Linux 系统的,我们是可以直接运行 C++ 的程序

关于第二点,是需要我们有 root 权限的。但是它也是很方便的,例如有一个 C++ 的 SDK,需要运行在 Android 系统上测试,直接编写一个可执行程序在手机上运行,比写一个 APP 是方便和快捷很多的。

二、如何直接运行 C++ 的程序

  1. 首先你需要下载 NDK 的开发包
  2. 使用 NDK 编译生成在 Android 系统上可运行的执行程序
  3. 把编译好的可执行程序丢到手机的 “/data/local/tmp” 目录下(其它一些目录也是可以的,只要能够执行)。
  4. 给可执行程序添加执行权限(chmod +x 命令),然后直接执行就可以了。
  5. 针对有 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 ...

  • 13
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值