我正在维护一个(相对)旧的Android应用程序,该应用程序使用NDK内置的库来实现某些功能。它最初是为NDK 9级平台构建的。
我一直在尝试使构建基础结构现代化,其中一部分是使用更新的SDK和NDK版本,这些版本不再支持NDK平台9(现在的最低版本为16)。
不更新我们针对其构建的目标NDK和/或不更新至最新的NDK平台级别(当前为28)是否有任何优势,或者始终更新它是一个好主意?新的NDK发布时,NDK目标平台级别是什么?
答案 0 :(得分:1)
使用“适当的” NDK版本可能是一个更好的选择,而不是坚持使用过旧的NDK版本。使用“赶上时间” NDK版本的优点之一是适应Android ABI更改,以及随着Android API版本的发展对编译器更改的改进。例如。
此外,每个新修订版几乎总是存在一些错误修复和安全性增强。就我个人而言,坚持使用旧版本的NDK并没有太多附加值。
不更新我们构建的目标NDK是否有任何优势
也许不更新NDK版本的优点是使您的项目与那些即将消失的历史设备兼容。
您可以查看NDK的发行说明以了解其发展。 https://developer.android.com/ndk/downloads/revision_history
对于您对armeabi-v7a的关注,以下是它的正式说法https://developer.android.com/ndk/guides/abis#v7a。
-编辑-
澄清一些事情:
NDK修订版:每个修订版通常都会添加/删除功能和受支持的平台。当前最新版本是 r18b 。与r16b相比,它删除了 android-14 和 android-15 的平台。
minSdkVersion
:在模块级minSdkVersion
文件的defaultConfig
或productFlavors
块中设置build.gradle
属性。这样可以确保您的库仅由运行适当版本的Android的设备上安装的应用使用。
ANDROID_PLATFORM
CMake变量:此变量用于指定目标Android平台的名称。例如,android-18指定Android 4.3(API级别18)。您有两个选项来配置要构建的android平台,一个是此CMake变量,另一个是miniSdkVersion
。还要注意,CMake具有选择最佳平台版本的逻辑,不一定等于所说的minSdkVersion
。
- 如果ABI的平台版本等于
minSdkVersion
,则CMake使用该版本。- 否则,如果ABI的平台版本低于
minSdkVersion
,则CMake将使用这些平台中的最高版本。这是一个合理的选择,因为缺少平台版本通常意味着自从先前的可用版本以来,本机平台API一直没有更改。- 否则,CMake将使用高于
minSdkVersion
的下一个可用平台版本。
因此,当您升级 NDK版本时,请仔细检查NDK平台目录中是否存在所需的android平台,例如android-ndk-r16b/platforms
。
答案 1 :(得分:1)
增加NDK API级别的唯一缺点是,这等效于您的minSdkVersion
。如果您增加minSdkVersion
,那么您将放弃对旧设备的支持。
只有当用户数量很少时,NDK本身才会放弃对API级别的支持。 API级别16及以上版本占所有用户的99%以上。如果由于某种原因,您的应用程序的使用数量在Gingerbread或ICS上显示出大量用户,则您需要使用较旧的NDK来继续支持这些设备。
升级minSdkVersion
的优点是,您可以使用更多的API,并且要测试的配置更少(假设较旧的设备可能会遇到更多问题,这可能是由于大大减少了所需的工程工作量。
正确的API级别会因应用程序而异(尽管有趣的是有twitter account that gives a reasonable suggestion)。检查您的使用次数,查看您的用户所在的位置,并与支持较旧版本带来的困难进行权衡。如果您的应用程序像是高保真游戏,Jelly Bean设备很可能无法以任何合理的性能运行您的应用程序,因此没有必要支持这些设备。