不更新目标 NDK 平台有什么好处吗?
Is there any advantage to not updating target NDK platform?
我正在维护一个(相对)旧的 Android 应用程序,它使用 NDK 构建的库来实现某些功能。它最初是为 NDK 平台级别 9 构建的。
我一直在努力实现构建基础设施的现代化,作为其中的一部分,我正在使用更新的 SDK 和 NDK 版本,这放弃了对 NDK 平台 9 的支持(最低版本现在是 16)。
不更新我们构建的目标 NDK,and/or不更新到最新的 NDK 平台级别(当前为 28),有什么好处吗?在发布新的 NDK 时更新 NDK 目标平台级别总是一个好主意吗?
可能,使用 "proper" NDK 版本是更好的选择,而不是坚持使用太旧的 NDK 版本。使用 "catching the time" NDK 版本的优势之一是 适应 Android ABI 更改 以及编译器更改的改进以及 Android API 版本进化。例如。
- 不再支持 GCC。它在 NDK r18 中被删除。
- 已删除对 ARMv5 (armeabi)、MIPS 和 MIPS64 的支持。自 r17 以来,尝试构建这些 ABI 中的任何一个都将导致错误。
此外,每个新修订版几乎总是有一些错误修复和安全性增强。我个人认为坚持使用旧版本的 NDK 没有太多附加值。
Is there any advantage to not updating the target NDK we build against
也许不更新NDK版本的好处是让你的项目兼容那些即将消失的历史设备。
您可以查看 NDK 的发行说明以了解其演变。
https://developer.android.com/ndk/downloads/revision_history
对于大家对armeabi-v7a的关注,官方是这样说的https://developer.android.com/ndk/guides/abis#v7a。
-- 编辑 --
澄清一些事情:
NDK 修订版:每个修订版通常 add/remove 功能和支持的平台。目前最新版本是r18b。相比r16b,去掉了android-14和android-15.
[平台=69=]
minSdkVersion
:在模块级 [=14] 的 defaultConfig
或 productFlavors
块中设置 minSdkVersion
属性 =] 文件。这确保您的库仅供安装在设备上的应用程序使用 运行 Android.
的适当版本
ANDROID_PLATFORM
CMake变量:该变量用于指定目标Android平台的名称。例如,android-18 指定 Android 4.3(API 级别 18)。你有两个选项来配置你正在构建的android平台,一个是这个CMake变量,另一个是miniSdkVersion
。还要注意,CMake 有自己的逻辑来选择 best 平台版本,不一定等于所说的 minSdkVersion
。
- If there exists a platform version for the ABI equal to
minSdkVersion
, CMake uses that version.
- Otherwise, if there exists platform versions lower than
minSdkVersion
for the ABI, CMake uses the highest of those platform versions. This is a reasonable choice because a missing platform version typically means that there were no changes to the native platform APIs since the previous available version.
- Otherwise, CMake uses the next available platform version higher than
minSdkVersion
.
因此,当您升级 NDK 修订版 并仔细检查您所需的 android 平台是否存在于 NDK 平台目录中时,例如android-ndk-r16b/platforms
。
提高您的 NDK API 级别的唯一缺点是这相当于您的 minSdkVersion
。如果您增加 minSdkVersion
,您将放弃对旧设备的支持。
NDK 本身仅在用户数量很少时才会放弃对 API 级别的支持。 API 16 级及以上用户占所有用户的 99% 以上。如果出于某种原因,您的应用程序的使用数字显示姜饼或 ICS 上有大量用户,您将需要坚持使用较旧的 NDK 以继续支持这些设备。
升级 minSdkVersion
的 优势 是您可以访问更多 API 并且可以测试的配置更少(假设较旧的设备可能会有更多问题,这可能会大大减少所需的工程工作量)。
正确的 API 级别因应用程序而异(尽管有趣的是 twitter account that gives a reasonable suggestion)。检查您的使用数量并查看您的用户在哪里,并平衡它与支持旧版本所带来的困难。如果您的应用程序类似于高保真游戏,那么 Jelly Bean 设备很可能无法 运行 您的应用程序以任何合理的性能运行,因此支持这些设备毫无意义。
我正在维护一个(相对)旧的 Android 应用程序,它使用 NDK 构建的库来实现某些功能。它最初是为 NDK 平台级别 9 构建的。
我一直在努力实现构建基础设施的现代化,作为其中的一部分,我正在使用更新的 SDK 和 NDK 版本,这放弃了对 NDK 平台 9 的支持(最低版本现在是 16)。
不更新我们构建的目标 NDK,and/or不更新到最新的 NDK 平台级别(当前为 28),有什么好处吗?在发布新的 NDK 时更新 NDK 目标平台级别总是一个好主意吗?
可能,使用 "proper" NDK 版本是更好的选择,而不是坚持使用太旧的 NDK 版本。使用 "catching the time" NDK 版本的优势之一是 适应 Android ABI 更改 以及编译器更改的改进以及 Android API 版本进化。例如。
- 不再支持 GCC。它在 NDK r18 中被删除。
- 已删除对 ARMv5 (armeabi)、MIPS 和 MIPS64 的支持。自 r17 以来,尝试构建这些 ABI 中的任何一个都将导致错误。
此外,每个新修订版几乎总是有一些错误修复和安全性增强。我个人认为坚持使用旧版本的 NDK 没有太多附加值。
Is there any advantage to not updating the target NDK we build against
也许不更新NDK版本的好处是让你的项目兼容那些即将消失的历史设备。
您可以查看 NDK 的发行说明以了解其演变。 https://developer.android.com/ndk/downloads/revision_history
对于大家对armeabi-v7a的关注,官方是这样说的https://developer.android.com/ndk/guides/abis#v7a。
-- 编辑 --
澄清一些事情:
NDK 修订版:每个修订版通常 add/remove 功能和支持的平台。目前最新版本是r18b。相比r16b,去掉了android-14和android-15.
[平台=69=]minSdkVersion
:在模块级 [=14] 的defaultConfig
或productFlavors
块中设置minSdkVersion
属性 =] 文件。这确保您的库仅供安装在设备上的应用程序使用 运行 Android. 的适当版本
ANDROID_PLATFORM
CMake变量:该变量用于指定目标Android平台的名称。例如,android-18 指定 Android 4.3(API 级别 18)。你有两个选项来配置你正在构建的android平台,一个是这个CMake变量,另一个是miniSdkVersion
。还要注意,CMake 有自己的逻辑来选择 best 平台版本,不一定等于所说的minSdkVersion
。- If there exists a platform version for the ABI equal to
minSdkVersion
, CMake uses that version. - Otherwise, if there exists platform versions lower than
minSdkVersion
for the ABI, CMake uses the highest of those platform versions. This is a reasonable choice because a missing platform version typically means that there were no changes to the native platform APIs since the previous available version. - Otherwise, CMake uses the next available platform version higher than
minSdkVersion
.
- If there exists a platform version for the ABI equal to
因此,当您升级 NDK 修订版 并仔细检查您所需的 android 平台是否存在于 NDK 平台目录中时,例如android-ndk-r16b/platforms
。
提高您的 NDK API 级别的唯一缺点是这相当于您的 minSdkVersion
。如果您增加 minSdkVersion
,您将放弃对旧设备的支持。
NDK 本身仅在用户数量很少时才会放弃对 API 级别的支持。 API 16 级及以上用户占所有用户的 99% 以上。如果出于某种原因,您的应用程序的使用数字显示姜饼或 ICS 上有大量用户,您将需要坚持使用较旧的 NDK 以继续支持这些设备。
升级 minSdkVersion
的 优势 是您可以访问更多 API 并且可以测试的配置更少(假设较旧的设备可能会有更多问题,这可能会大大减少所需的工程工作量)。
正确的 API 级别因应用程序而异(尽管有趣的是 twitter account that gives a reasonable suggestion)。检查您的使用数量并查看您的用户在哪里,并平衡它与支持旧版本所带来的困难。如果您的应用程序类似于高保真游戏,那么 Jelly Bean 设备很可能无法 运行 您的应用程序以任何合理的性能运行,因此支持这些设备毫无意义。