前言

在开发一个需要Native代码的jar包的时候,我们可以单独编译Native代码成so库,而不需要使用Android Studio进行编译,这样在开发通用Native代码的时候可以节省很多时间。

设置环境变量

设置ANDROID_HOME/ANDROID_SDK_HOME变量,该目录为安装Android Studio时候设置的SDK目录,比如我的目录为D:\Library\Android\sdk,那么设置该变量为此地址即可。

编译脚本build.bat

set abi=arm64-v8a
if not exist %abi% md %abi%
cd %abi%
%ANDROID_SDK_HOME%/cmake/3.22.1/bin/cmake ^
  -DANDROID_ABI=%abi% ^
  -DANDROID_NDK=%ANDROID_SDK_HOME%/ndk/25.1.8937393 ^
  -DCMAKE_BUILD_TYPE=Debug ^
  -DCMAKE_TOOLCHAIN_FILE=%ANDROID_SDK_HOME%/ndk/25.1.8937393/build/cmake/android.toolchain.cmake ^
  -DANDROID_NATIVE_API_LEVEL=19 ^
  -DANDROID_TOOLCHAIN=clang -DCMAKE_GENERATOR="Ninja" ^
  -DCMAKE_MAKE_PROGRAM=%ANDROID_SDK_HOME%/cmake/3.22.1/bin/ninja ^
  ..

%ANDROID_SDK_HOME%/cmake/3.22.1/bin/ninja
cd ..

以上脚本参考自Ref 1,做了一些简单的错误更正和微调,其中DANDROID_NDK的设置需要定位到D:\Library\Android\sdk\ndk\25.1.8937393,而不是内层的build目录。

针对MacOS平台:

#!/usr/bin/env sh
echo "========== Compile Android *.so =========="
abi="arm64-v8a"
NDK_VERSION="27.0.11718014"
ANDROID_SDK_HOME="/Users/winter/Library/Android/sdk"
ANDROID_NDK_PATH="$ANDROID_SDK_HOME/ndk/$NDK_VERSION"
CMAKE_VERSION="3.22.1"

if [ ! -d "bins" ]; then
  mkdir "bins"
fi
cd bins
# bins/arm64-v8a
if [ ! -d $abi ]; then
  mkdir $abi
fi
cd $abi

$ANDROID_SDK_HOME/cmake/$CMAKE_VERSION/bin/cmake \
  -DANDROID_ABI=$abi \
  -DANDROID_NDK=$ANDROID_NDK_PATH \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_PATH/build/cmake/android.toolchain.cmake \
  -DANDROID_NATIVE_API_LEVEL=21 \
  -DANDROID_TOOLCHAIN=clang -DCMAKE_GENERATOR="Ninja" \
  -DCMAKE_MAKE_PROGRAM=$ANDROID_SDK_HOME/cmake/$CMAKE_VERSION/bin/ninja \
  ../..

$ANDROID_SDK_HOME/cmake/$CMAKE_VERSION/bin/ninja

基本变量解释:

ANDROID_ABI:目标ABI,支持armeabi-v7a,arm64-v8a等。
ANDROID_NDK:NDK的目录。
ANDROID_TOOLCHAIN:编译Cmake使用的工具链,默认clang
ANDROID_NATIVE_API_LEVEL:编译Android NDK的API级别
CMAKE_TOOLCHAIN_FILE:Cmake编译链接时的cmake文件
CMAKE_MAKE_PROGRAM:make程序选择

Ref

  1. https://www.cnblogs.com/Jeff77/p/14636012.html
最后修改:2024 年 05 月 05 日
如果觉得我的文章对你有用,请随意赞赏