1. 下载NDK
https://developer.android.google.cn/ndk/downloads/
2. 解压NDK,并且配置环境变量
export PATH=/xxx/android-ndk-r20:$PATH
3. 编译特定平台的工具链(这里是x86,通过adb shell getprop ro.product.cpu.abi
查看)
(1)在NDK的build/tools目录有make-standalone-toolchain.sh 的程序让用户创建标准的交叉编译工具链(交叉工具链是指可以生成目标环境可运行代码的工具集);
(2)查看ndk支持编译哪些cpu
在toolchains目录中查看有:
aarch64-linux-android-4.9 arm-linux-androideabi-4.9 llvm renderscript x86-4.9 x86_64-4.9
(3)选择x86-4.9
的cpu
执行:./build/tools/make-standalone-toolchain.sh --toolchain=x86-4.9
(参数–platform=android-15
可选平台)
最终,在/tmp/ndk-haward
目录下生成i686-linux-android.tar.bz2
压缩文件(解压:tar -jxvf i686-linux-android.tar.bz2
),可以解压到任意一个文件夹
4. 配置工具链的g++/gcc环境变量
export PATH=/xxx/i686-linux-android/bin:$PATH
5. 在linux上利用交叉编译编译so库供android调用
先编写java文件
package com.example.x86demo;
public class X86Jni {
public native String testHello();
}
接着,编译头文件
然后,编写c文件
//
// Created by MI on 2019/8/5.
//
#include "com_example_x86demo_X86Jni.h"
jstring JNICALL Java_com_example_x86demo_X86Jni_testHello(JNIEnv* env, jobject obj){
jstring str = (*env)->NewStringUTF(env,"Hello x86!\n");
return str;
}
最后,编译动态库
i686-linux-android-gcc -shared -fPIC -I/home/haward/jdk1.8/include/ -I/home/haward/jdk1.8/include/linux/ main.c -o libhellojni.so
该so库可被android的x86系统调用
参考
https://blog.csdn.net/u010274731/article/details/80608376
https://www.jianshu.com/p/00865617abba
代码下载