繁体   English   中英

对于具有本机代码的应用,Android的新64位要求是否意味着新的最低API级别为21?

[英]Does Android's new 64-bit requirement mean the new minimum API level is 21 for apps with native code?

考虑以下:

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

我已经尝试进行研究以弄清楚所有这些东西是如何工作的 - 直到现在我大部分时间都是为了将​​我的C ++库移植到Android而只是试图获取依赖关系来进行攻击 - 所以请原谅我如果我错过了一些非常明显的东西。 但在我看来,上面表明使用Android NDK构建的应用程序必须从2019年8月1日开始以最低API级别21为目标。这是正确的吗?

参考文献:

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

64位体系结构的最低API级别为21,这是因为Android之前根本不支持64位 通过在构建脚本和/或makefile中使用条件,可以为64位体系结构指定API级别为21,对于32位体系结构,仍然可以低至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

只需编译并包含您在apk中的相同32位本机库的64位版本。 像以前一样留下最小的SDK版本。

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

Cmake构建系统将自动选择正确的ndk库与build.gradle中的minSdkVersion链接,因此您不需要太在意设置构建过程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM