Android 是什么决定了用于构建的 abi

On Android what determines the abi that is used for building

所以我有一个 .so,它包含在某些构建中,但不包含在其他构建中。

我的预构建脚本删除了 .so,关联的 .jar 从 build.gradle 中删除了库。

该库来自第 3 方,我无法控制请求 x86 或 arm-v7。只提供给我。

当我在没有库支持的情况下进行构建时,我在 Xamarin 测试中遇到错误,指出 apk 不支持 x86。

实际控制 apk 支持哪些 abi。

Xamarin 开发人员门户上的 Using Native Libraries 文档解释了其中的一半:

https://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/

您的 Android 应用程序支持的 ABI 取决于您的 APK 中是否存在 .so 文件,位于 lib/<ABI> 文件夹下,其中 ABI 可以是 armeabi、armeabi-v7a 中的一个或多个, arm64-v8a, mips, mips64, x86, x86_64(当前七个 ABI)。

我个人使用 Google Play 商店中的一个应用程序来帮助部署哪些文件:

https://play.google.com/store/apps/details?id=com.xh.nativelibsmonitor.app

所以大多数设备通常都支持多个 ABI。因此,您将获得支持的 ABI 列表,Android 包管理器使用这些 ABI 来安装设备喜欢的 .so 文件。

基本上,这里的最佳做法是确保将优化的库放入上面列出的每个 <ABI> 文件夹中。只知道当应用程序安装到设备上时,只会安装一种受支持的架构。

非常感谢 http://ph0b.com/android-abis-and-so-files/ 作为人类可读的资源。

否则更多技术资源:https://developer.android.com/ndk/guides/abis.html

事实证明,我的预构建脚本实际上并没有删除 .so 文件。

rm -rf /core/src/main/jniLibs

不是

rm -rf core/src/main/jniLibs