Android原生库构建:版本关联与minSdkVersion命令行配置问题
Hey there, let's break down how to adjust minSdkVersion when building your Android native library via command line, plus a quick note on debugging that API 23 crash you're seeing.
情况1:直接用CMake + NDK工具链构建
如果你是直接通过cmake命令生成Ninja构建文件,只需要在配置阶段传递ANDROID_MIN_SDK_VERSION参数即可。这个参数会覆盖CMakeLists.txt中设置的对应值,如果你的CMakeLists里没定义过,就会直接使用这个传递的值。
给你一个完整的示例命令:
cmake -S . -B build \ -DCMAKE_TOOLCHAIN_FILE=/path/to/your/ndk/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=arm64-v8a \ -DANDROID_MIN_SDK_VERSION=21 \ -GNinja
把/path/to/your/ndk替换成你实际的NDK路径,或者提前设置ANDROID_NDK环境变量来简化命令。
之后正常执行构建命令就行:
cmake --build build
情况2:用Gradle命令行构建(AGP项目)
如果你的项目是用Android Gradle Plugin(AGP)管理的(也就是有build.gradle文件的标准Android项目),可以通过Gradle项目属性临时或持久化覆盖minSdkVersion。
单次构建临时覆盖
只需要在Gradle命令后添加-Pandroid.minSdkVersion=21参数,比如:
./gradlew assembleDebug -Pandroid.minSdkVersion=21
这个设置只会对本次构建生效,不会修改build.gradle里的默认配置。
持久化覆盖(可选)
如果希望每次构建都使用这个值,不用每次都传参数,可以在项目根目录的gradle.properties文件中添加一行:
android.minSdkVersion=21
小提示:排查API 23崩溃问题
既然你提到设置为23时库会崩溃、21正常,这里给几个排查方向:
- 检查是否用到了API 23开始需要动态申请的权限(比如
READ_EXTERNAL_STORAGE),原生代码可能因为权限被拒绝而执行失败; - 确认是否调用了API 23中行为发生变化的原生接口,比如文件访问限制、SELinux策略变更相关的函数;
- 崩溃后立刻用
adb logcat抓取日志,通过栈定位具体的崩溃点,这是最直接的排查方式。
内容的提问来源于stack exchange,提问作者Bharath

