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

标签 android xamarin abi

所以我有一个 .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/作为人类可读的资源。

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

关于android - 在 Android 上,什么决定了用于构建的 abi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37819330/

相关文章:

java - 如何从依赖的 jar 访问资源文件?

android - Firebase Remote Config 限速是怎么计算的?

visual-studio - Xamarin IOs,从 Visual Studio for Windows 连接到 Mac Build Agent 时,私钥已加密但密码为空

iphone - 在任何操作系统上运行不同格式的可执行文件

c++ - 在 C++ 中,重写现有虚函数是否会破坏 ABI?

android - 如何在没有手指抬起的情况下检测滑动事件

android - ndk-build : undefined reference to . 。静态链接到 libxml.a 时出错

c# - 页面中的 XAML Xamarin 用户控件不呈现内容

xamarin - 我需要阻止 XamarinForms 上日期选择器中的粘贴功能

c++ - 为什么 boolean 值是 1 字节而不是 1 位大小?