我可以根据 Android API LEVEL 强制使用 armeabi-v7a 与 arm64-v8a 吗?

Posted

技术标签:

【中文标题】我可以根据 Android API LEVEL 强制使用 armeabi-v7a 与 arm64-v8a 吗?【英文标题】:Can I force use armeabi-v7a vs arm64-v8a according to Android API LEVEL? 【发布时间】:2021-12-07 08:10:38 【问题描述】:

我正在使用 NDK21d 为 2 个拱门构建本机库:armeabi-v7a 和 arm64-v8a。

我在 APK 中嵌入了两个库 .so(32 和 64),它的 minsdkversion 设置为 21。

但我面临一个问题,如果 API 级别

因此,作为一种解决方法,我想强制将 armeabi-v7a 用于 Lollipop 设备,即使它们支持 64 位。

这可能吗?在 build.gradle 中?

提前致谢

【问题讨论】:

除非你明确地调用__register_atfork,否则这听起来像是你的构建系统中的一个错误。 我的内部库嵌入的一些外部库确实使用它。所以必须拥有它。更多信息在这里:github.com/android/ndk/issues/964 【参考方案1】:

如果应用程序没有性能差异,

您只能使用 armeabi-v7a 架构,

它可以在 arm64 设备上运行,因为它们是兼容的。

【讨论】:

这不是真的。对于某些工作负载,64 位具有明显更好的性能,因为它具有 armeabi-v7a 不可用的硬件支持扩展。仅限 32 位的应用程序也不能上传到 Play 商店。 64 位支持不是可选的。 确实我需要为 PlayStore 嵌入 armeabi-v7a 和 arm64-v8a ...这就是为什么我只想为 Android 5 设备例外,只强制使用 arm32 库,因为我知道确保如果它们支持 64 位,它们将与 arm64-v8a 库一起崩溃。我已经通过指定 ndk abiFilters "armeabi-v7a" 在 Android 5 设备 64 位的调试中对其进行了测试

以上是关于我可以根据 Android API LEVEL 强制使用 armeabi-v7a 与 arm64-v8a 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio如何调整API Level?

Android Studio 认为我正在为 API Level 1 而不是 Android L 构建

Android SDK版本号 与 API Level 对应关系

Android版本和API Level对应关系

“Android P”和“API Level 27”系统镜像有啥区别?

Android API Level 和对应版本号