在Android上,什么决定了用于构建的abi

时间:2016-06-14 18:14:55

标签: android xamarin abi

所以我有一个.so包含在一些版本中但不包含在其他版本中。

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

图书馆来自第三方,我无法控制要求x86或arm-v7。它仅供我使用。

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

实际控制apk支持abi的是什么。

2 个答案:

答案 0 :(得分:2)

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。因此,您将获得Android Package Manager用于安装设备所喜欢的.so文件的受支持ABI列表。

基本上,此处的最佳做法是确保将优化的库放在上面列出的每个<ABI>文件夹中。只需要知道,当应用程序安装在设备上时,只会安装一个受支持的体系结构。

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

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

答案 1 :(得分:0)

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

rm -rf / core / src / main / jniLibs

rm -rf core / src / main / jniLibs