Android的新64位要求是否意味着具有本地代码的应用程序的新最低API级别为21?

时间:2019-02-04 15:47:08

标签: android android-ndk android-api-levels

请考虑以下内容:

  • 通常,开发人员会将minSdkVersion设置为16,因为它覆盖了99%以上的设备( 1 )。
  • 但是,在2019年8月1日,Android将要求所有应用提供64位版本( 2 )。
  • 此外,NDK API级别(用-D__ANDROID_API__设置)必须等于minSdkVersion 3 )。
  • 最后,运行在arm64-v8a上的Android设备不支持低于API级别21( 4 )的任何设备。

我一直试图进行研究以弄清所有这些东西是如何工作的-直到现在,我一直主要通过尝试获取要构建的依赖关系以将我的C ++库移植到Android来破解自己的方式-因此,如果我遗漏了一些显而易见的内容,请原谅我。但是在我看来,以上表明,从2019年8月1日开始,使用Android NDK构建的应用程序必须将最低API级别定位为21。这是正确的吗?

参考文献:

2 个答案:

答案 0 :(得分:1)

只需编译并包含apk中相同的32位本机库的64位版本。保留以前的最低SDK版本。

如果应用程序在API <21上运行,它将看不到64位本机库,并且它将像以前一样适用于32位版本。在API 21+上,设备可能会使用64位库,具体取决于CPU。

Cmake生成系统会自动从build.gradle中的minSdkVersion中选择正确的ndk库进行链接,因此您无需太在意设置生成过程。

更多信息:https://developer.android.com/ndk/guides/cmake

答案 1 :(得分:0)

在研究过程中,我认为我找到了答案。如果这个错误,请随时添加更好的答案。

64位体系结构的最低API级别为21是由于Android simply did not support 64-bit before then的事实。通过在构建脚本和/或makefile中使用条件,可以将64位体系结构的API级别指定为21,而将32位体系结构的API级别指定为16。这样一来,您将可以满足Google的要求,并仍然提供与以前一样的兼容性。这是我自己的脚本之一的片段:

case "${ABI}" in
  armeabi-v7a | x86)
    API_LEVEL=16
    ;;
  arm64-v8a | x86_64)
    API_LEVEL=21
    ;;
  *)
    echo >&2 "Invalid ABI ${ABI}"
    exit 1
    ;;
esac