所以我有一个 .so,它包含在某些构建中,但不包含在其他构建中。
我的预构建脚本删除了 .so,关联的 .jar 从 build.gradle 中删除了库。
该库来自第 3 方,我无法控制请求 x86 或 arm-v7。它仅在 ARM 上提供给我。
当我在没有库支持的情况下进行构建时,我在 Xamarin 测试中遇到错误,指出 apk 不支持 x86。
什么实际上控制了 apk 支持什么 abi。
最佳答案
Using Native Libraries
Xamarin 开发人员门户上的文档解释了其中的一半:
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(目前的7个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/作为人类可读的资源。
关于android - 在 Android 上,什么决定了用于构建的 abi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37819330/