我可以根据 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 1 而不是 Android L 构建
Android SDK版本号 与 API Level 对应关系