在linux上交叉编译helloWorld到android手机上
2020-08-06 本文已影响0人
book_02
在ubuntu上交叉编译helloWorld到arm64的android手机上去。
这里NDK用的是r19及以上的版本。
1. 安装NDK
从下面的链接下载NDK,并解压:
https://developer.android.google.cn/ndk/downloads/
这里下载了 android-ndk-r21b,解压到 /home/temp/programs/android-ndk-r21b
2. 写main.cpp文件
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
3. 写交叉编译脚本 generate.sh
由于命令比较短,也可直接在命令行里写。
新建generate.sh,并给执行权限 : chmod +x generate.sh
export NDK=/home/temp/programs/android-ndk-r21b
$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang++ \
main.cpp -o hello
使用了NDK 默认安装的工具链,按照官网说明,NDK在r19之后,NDK 默认安装的工具链可供使用。
可以不需要使用 make_standalone_toolchain.py 脚本生成独立工具链来使用。
这样使用自带的工具链就比较方便,不用再配置sysroot
等编译选项。
其中NDK为自己解压的目录。
编译器要选择自己手机的架构,这里用的是arm64,所以是aarch64-linux-android。
编译器要选择android的api版本,这里用的是anroid 8.0.0,对应api是26。
Android NDK从r13起,默认使用Clang进行编译。
交叉编译出可执行程序hello
./generate.sh
4. 放到手机上执行
4.1 安装adb工具
ubuntu下 :
sudo apt install android-tools-adb android-tools-fastboot
4.2 push到手机
adb push hello /data/local/tmp
4.3 给hello执行权限
adb shell
cd /data/local/tmp
chmod +x hello
4.4 执行hello
./hello
可以看到输出
hello world
5. 参考
https://developer.android.com/ndk/guides/other_build_systems