You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无需Android Studio,命令行拆分构建Android NDK原生库与AAR

命令行独立构建Android原生库与AAR的方案

刚好我之前也处理过类似的场景,用你提到的android.toolchain.cmake完全可以实现脱离IDE的独立构建,而且这也是NDK官方现在推荐的现代方式(Android.mk确实已经被淘汰了)。结合你的环境(NDK r16b、Android Studio 3.0.1),给你整理一套清晰的步骤:

核心前提

先确认你的环境没问题:ANDROID_NDK环境变量已经指向NDK r16b的根目录,而且%ANDROID_NDK%\build\cmake\android.toolchain.cmake这个文件确实存在——这是整个CMake构建Android原生库的核心配置文件。

分步实施

1. 为libA、libB配置独立的CMakeLists.txt

每个库都需要自己的CMakeLists.txt,要明确几个关键点:

  • 指定库的类型(STATICSHARED,根据你的需求选择)
  • 列出所有源文件
  • 链接依赖的外部库(ssl、yajl、fribidi这些,注意要提前为目标Android ABI编译好对应版本,或者把它们的构建逻辑也整合到CMake脚本里)
  • 加上必要的编译参数(比如C++标准、优化选项等)

2. 命令行构建单个原生库(以libA为例)

先给每个库单独创建构建目录,避免源码目录被构建文件污染:

# 创建并进入构建目录
mkdir build && cd build

然后执行CMake配置命令(这里以Windows环境为例):

cmake -G "MinGW Makefiles" ^
-DCMAKE_TOOLCHAIN_FILE=%ANDROID_NDK%\build\cmake\android.toolchain.cmake ^
-DANDROID_NATIVE_API_LEVEL=android-19 ^
-DCMAKE_MAKE_PROGRAM=%ANDROID_NDK%\prebuilt\windows-x86_64\bin\make.exe ^
-DCMAKE_BUILD_TYPE=Release ^
-DANDROID_ABI="armeabi-v7a with NEON" ^
..

如果是Linux或macOS,只需要调整环境变量和生成器:

cmake -G "Unix Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_NATIVE_API_LEVEL=android-19 \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_ABI="armeabi-v7a with NEON" \
..

配置完成后,执行构建命令:

cmake --build .

小提示:

  • -G指定的生成器要和你的系统匹配,Windows用MinGW Makefiles,类Unix系统用Unix Makefiles
  • ANDROID_NATIVE_API_LEVEL是你要支持的最低Android版本,这里选的是android-19(对应Android 4.4)
  • ANDROID_ABI可以根据需求更换,比如arm64-v8ax86
  • CMAKE_BUILD_TYPE选Release会生成优化后的库,Debug模式适合开发调试

3. 独立构建C.aar

AAR的构建可以用Gradle来完成,完全不需要打开Android Studio:

  • 先搭建一个标准的Android Library项目结构:
    • src/main/java:存放你的Java业务代码
    • src/main/jniLibs:按ABI分类存放之前构建好的libA、libB以及依赖的外部库(比如jniLibs/armeabi-v7a/下对应的.so文件)
    • src/main/res:如果有资源文件就放在这里
    • 根目录下的build.gradle要配置好SDK版本、NDK相关参数(如果需要动态编译JNI的话)
  • 然后在项目根目录执行Gradle命令构建:
# Windows环境
gradlew assembleRelease

# Linux/macOS环境
./gradlew assembleRelease

构建完成后,生成的AAR文件会在build/outputs/aar/目录下。

4. 批量构建优化

如果要同时构建多个库和AAR,可以写个简单的脚本(批处理或Shell脚本),自动依次执行各个库的构建命令,再触发AAR的构建,省得手动重复操作。


内容的提问来源于stack exchange,提问作者Rami Rosenbaum

火山引擎 最新活动