android - 为什么 Android NDK 会错过某些 API 级别?

标签 android android-ndk

我刚刚安装了最新的 Android Studio 和 Android NDK。在检查我的 NDK 安装的 platforms 目录时,我可以看到以下平台:

android-9
android-12
android-13
android-14
android-15
android-16
android-17
android-18
android-19
android-21
android-22
android-23
android-24

您可以看到 NDK 中缺少 API 级别 10、11、20 和 25。那这是为什么?

如果我的应用应该以 API 级别 11 为目标怎么办?在这种情况下,我应该将什么定义为 ANDROID_PLATFORM?我尝试了以下方法,尽管我的 NDK 中没有 android-11 目录,但它似乎可以工作:

externalNativeBuild {
    cmake {
        arguments '-DANDROID_PLATFORM=android-11',
                  '-DANDROID_TOOLCHAIN=clang'
    }
}

这是达到 API 级别 11 的正确方法吗?这让我有点困惑,因为它似乎有效,但正如我所说,我的 NDK 安装中没有 android-11 目录...

感谢任何可以阐明这一点的人!

最佳答案

您可以在NDK guide 中找到问题的答案。 .底线是,并非所有系统升级都涉及对公共(public)(稳定) native API 的更改,因此在 platforms 下没有单独的目录。例如,要让您的原生库与 API 11 (HONEYCOMB) 兼容,您应该使用 platforms/android-9

一般的 Android NDK,特别是 Android Studio 的 CMake 实用程序,知道这条规则,并明确执行它 here .

请注意,最近的 NDK (r14) 已放弃对 API 9 (GINGERBREAD) 以下平台的支持。

更新 有一个bug在 NDK r15 中:它没有正确处理丢失的 android-25 文件夹。因此,如果您的 Android 项目有 minSdkVersion 25,您应该手动选择 APP_PLATFORM=android-24(或 '-DANDROID_PLATFORM=android-24'如果你使用 cmake)。

关于android - 为什么 Android NDK 会错过某些 API 级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559120/

相关文章:

从 C++ JNI NDK 函数调用两次的 Java 方法

android - onLongPress 和 ACTION_MOVE

java - 从 Android Java 调用 native 函数 - JNI 的替代方案

android - Android 上的 LD_PRELOADING dlopen

java - 使用 Unity3D 需要原生 Android Activity 和 Java 中的触摸事件

android - 只为 android apk 保留 armeabi-v7a 是否安全

android - OpenCV 2.3 : how to capture frames from Android camera?

android - 无法通过 Intent 播放视频

java - 两个不同的 Activity 中有两个不同的 SwitchCompat

android - 停止并重放音频文件