Android NDK 支持版本有限

Android NDK Support Version Limited

我已经使用 Android NDK 多年,然而,最近,当我使用 ndk-build(ndk 版本 15)构建 CPP 时,我看到了下面的消息

Android NDK: android-9 is unsupported. Using minimum supported version android-14. Android NDK: WARNING: APP_PLATFORM android-14 is higher than android:minSdkVersion 9

为什么 NDK 停止支持低于 android-14 的 Android 级别 (3-13)?

我试图在 NDK 指南中找出原因,https://developer.android.com/ndk/guides/stable_apis.html 虽然我仍然不知道。 NDK好像还是支持level 3以上的。

我还猜测我在 c++ 中需要的标志或功能之一可能会导致此问题。然而,至今我都没有找到任何线索。

LOCAL_CPP_FEATURES := rtti exceptions
APP_CPPFLAGS += -std=c++11
APP_STL := gnustl_static

如果您的应用应该 android-9

运行,请不要更新 NDK 版本 15

根据 NDK 修订历史 (https://developer.android.com/ndk/downloads/revision_history.html),

Android 2.3 (android-9) is no longer supported. The minimum API level target in the NDK is now Android 4.0 (android-9). If your APP_PLATFORM is set lower than android-14, android-14 is used instead.

您的问题 'why' 应提交给 NDK 团队。您可以在 public mail list or open a complaint at GitHub 询问他们。

无论如何,目前他们的决定是停止支持旧设备。期待下一个版本的 NDK 进一步降低平台要求。

有趣的问题是你应该怎么做。如果你更关心 android-9 而不是 android-26,你可以简单地继续使用旧的NDK 的发布。它不会停止工作。它没有有效期。

通常,Android 保持向后兼容性:如果应用程序是为平台 X 构建的,它将 运行(可能处于兼容模式)在平台 - (X+n) 上。

另一方面,新版本的 NDK 修复了重要的错误,包括安全修复。新设备(例如平台 'O')使用旧 NDK 编译的二进制文件 运行 可能有问题。当然,旧的 NDK 不会让您访问仅在高级平台上可用的新功能。

因此,上传两个不同的 APK 可能是值得的 - 一个目标 SDK=9,另一个最小 SDK=21(您的数量可能会有所不同)。 Play 商店允许为不同的平台(和 ABI)维护单独的 APK。您只应注意版本代码策略,然后您的用户将及时收到他们的更新 - 那些坚持使用 Eclair 的用户,以及升级到 Nougat 的用户。