如果没有Linux环境请先参考这个文章安装:juejin.cn/post/736175…
涉及以下三个知识点:
输出可执行文件:
gcc xxx.c -o libxxx
编译so命令:
gcc -fPIC -shared xxx.c -o libxxx.so
编译静态库命令:
先要转变成.o文件,才能转变成.a文件;
转变成.o:
gcc -fPIC -c xxx.c -o xxx.o
转变成.a:
ar rcs -o libxxx.a xxx.o
输出可执行文件:
1.下载Linux系统的NDK文件:developer.android.google.cn/ndk/downloa… ,笔者所用的版本是:googledownloads.cn/android/rep…
#在Linux系统的命令窗口执行,以下命令获取ndk压缩包
wget https://googledownloads.cn/android/repository/android-ndk-r26d-linux.zip
#解压缩:
unzip android-ndk-r26d-linux.zip
2.编写shell脚本(build.sh):
#gcc Android平台的GCC
export NDK_GCC="/home/xxx/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"
#--sysroot 寻找头文件和库文件
#-isystem 寻找头文件
export Params="--sysroot=/home/xxx/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /home/xxx/NDK/android-ndk-r17c/sysroot/usr/include/ -isystem /home/xxx/NDK/android-ndk-r17c/sysroot/usr/include/aarch64-linux-android/"
#-pie 必须要添加的参数
$NDK_GCC -pie $Params main.c -o mainBuild
3.执行脚本:
sh ./build.sh
输出静态文件:
在/etc/profile文件中配置:
#执行
vim /etc/profile
#进入编辑模式输入
#开始配置ndk交叉编译环境
#添加环境变量
export NDK="/home/xx/NDK/android-ndk-r17c"
export PATH=$PATH:$NDK
#配置GCC环境变量
export NDK_GCC_arm="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"
export NDK_GCC_x64="$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc"
#配置参数库文件和头文件依赖目录
export NDK_CFIG_arm="--sysroot=$NDK/platforms/android-21/arch-arm -isystem $NDK/sysroot/usr/include/ -isystem $NDK/sysroot/usr/include/arm-linux-androideabi/"
export NDK_CFIG_x64="--sysroot=$NDK/platforms/android-21/arch-arm64 -isystem $NDK/sysroot/usr/include/ -isystem $NDK/sysroot/usr/include/aarch64-linux-android/"
#配置静态库打包时候的ar指令变量
export NDK_AR_arm="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
export NDK_AR_x64="$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"
保存之后执行
source /etc/profile
环境变量生效之后替换静态打包命令:
#输出.o文件:
$NDK_GCC_arm $NDK_CFIG_arm -fPIC -c xxx.c -o xxxx.o
#输出.a文件:
$NDK_AR_arm rcs -o libxxx.a xxx.o
输出动态so文件:
环境变量参考静态配置环境变量,生效之后替换动态打包命令:
#输出.so文件:
$DNK_GCC_x64 $NDK_CFIGg_x64 -fPIC xx.c -o libxxx.so
最后在Android studio中导入静态动态库,并运行程序,大功告成!