用于android本机库构建的minSdkVersion,CompileSdkVersion和ANDROID_NATIVE_API_LEVEL之间的关系

时间:2018-02-19 18:30:39

标签: android cmake android-ndk android-gradle

我尝试使用CMakeList.txt文件构建Android本机库。当使用minSdkVersion 23构建库时,我观察到崩溃,而在使用Android Studio将minSdkVersion构建为21时,我没有遇到这个问题。问题是我无法弄清楚在通过命令行构建它时更改此值或传递参数的位置。我遵循构建本机库的正常过程是使用cmake命令后跟ninja命令生成忍者构建文件,但cmake命令没有任何变量来指定minSdkVersion。

为了使用cmake构建本机库,我可以找到的唯一可以指定版本的变量是ANDROID_NATIVE_API_LEVEL。文档(https://developer.android.com/ndk/guides/cmake.html)显示ANDROID_NATIVE_API_LEVEL是cmake用于编译的版本,但令我困惑的部分是每当我更改build.gradle文件中的minSdkVersion并通过gradle文件构建它时,日志文件显示cmake命令正在使用ANDROID_NATIVE_API_LEVEL,它被设置为gradle文件中存在的minSdkVersion。它不应该设置为CompileSdkVersion中的值吗?

我只需要一种方法将minSdkVersion变量传递给cmake命令。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

不,它不应该是compileSdkVersiontargetSdkVersioncompileSdkVersion是Java习语。本机代码的行为与Java代码不同(任何使用过的函数必须在运行时出现,无论它是否实际被调用)。因此minSdkVersion 必须成为您的ANDROID_NATIVE_API_LEVEL

请参阅https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md#target-api-set-higher-than-device-api

我假设您在Android-21设备上运行时遇到minSdkVersion 23崩溃?