无需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,要明确几个关键点:
- 指定库的类型(
STATIC或SHARED,根据你的需求选择) - 列出所有源文件
- 链接依赖的外部库(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 MakefilesANDROID_NATIVE_API_LEVEL是你要支持的最低Android版本,这里选的是android-19(对应Android 4.4)ANDROID_ABI可以根据需求更换,比如arm64-v8a、x86等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




