Android架构用法?

kos*_*kos 41 android arm android-ndk

我有一些相当大的应用程序二进制大小的本机库.我调查了APK拆分,但维护和QAing多个APK不是我想做的事情.

因此,我想使用ndk.abiFilters Gradle属性在我的发布版本风格中排除未使用的体系结构.(调试版本我想单独留下,以便我可以在x86上运行HAXM加速仿真器).

我想在我的发布版本中只有armeabi-v7a和arm64-v8a,但我不确定是否值得担心我正在放弃的其他架构的市场份额.经过大量的回顾,我找不到任何ARMv6(armeabi),MIPS,x86或x86_64的市场份额参考.我的直觉告诉我,后三者几乎不存在,但我不确定ARMv6.

在一个论坛上找到了这个链接,该论坛上有一系列使用各种架构的手机.某处有更可靠的东西吗?也许有%的用户类似于Android版本的仪表板?

如果我只是为armeabi-v7a和arm64-v8a(或者armeabi,armeabi-v7a和arm64-v8a)构建我的原生库,那么我还有什么别的想念?

mst*_*sjo 39

首先,如果你担心二进制大小,你真的不需要arm64-v8a,所有这些设备都可以正常运行armeabi-v7a二进制文件.只有当你真的需要从中获得最后一次额外的表现时,它才有可能是值得的.

至于armeabi和ARMv6; 从Android 4.4(2013年10月)开始,Android本身不再正式支持它 - 从Android 4.0开始它应该不太常见(从该版本开始,AOSP源需要修改仍然为ARMv6构建).所以在实践中,如果你不支持低于4.4的版本,你可以删除那个没有任何重大损失的版本.

另外,对于x86; 这些设备中的许多都带有令人惊讶的臂式二进制仿真,因此那些可以使用armeabi-v7a版本管理也很好.

  • 所以你说armeabi-v7a是否真的需要除非支持<4.4或需要v8a的额外性能? (4认同)
  • 几乎; 从那以后事情发生了一些变化,但并不多.即使您在技术上可能不需要64位支持,Play商店也会要求应用程序提供该版本,从2019年8月开始.现在完全弃用ARMv5/6(自NDK r16以来已弃用,在r17中删除).我认为没有大量新的x86 Android设备 - 英特尔已停止使用Atom手机/平板电脑. (4认同)
  • 差不多.有些x86设备可能不支持arm二进制文件,但我认为其中大多数都支持.还有mips设备,我不认为那些包括手臂仿真.它们非常罕见(虽然我没有找到任何统计数据来支持它,但可能比x8​​6设备更罕见). (3认同)

Jos*_*mez 30

使用应用程序包时,包含其他体系结构将不再对二进制文件大小产生任何影响,因为在这种情况下,Google Play将仅为每个设备提供适用于该特定设备的二进制文件.不仅如此,应用程序更新也将更小更快.

保留项目的先前信息仍未使用应用程序包:


Rad*_*esh 12

我在使用Mapbox遇到了这个问题,发现本文非常有用。

此基础上底部的图片,你只需要armeabi-V7A86和底座上何塞·戈麦斯答案我只是添加armeabi-V7A,并在所有没有问题。

因此,请在您的 app.gradle

android {
 defaultConfig {
        //other configs
        ndk {
            abiFilters "armeabi-v7a"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您仍然担心2%-3%的人使用x86架构(例如ASUS ZenFonelenovo手机),则必须在app.gradle

ndk {
    abiFilters "armeabi-v7a", "x86"
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

更新

如果要在Play商店中发布APK时出现此错误

在此处输入图片说明

你必须用这个

ndk {
    abiFilters "armeabi-v7a", "arm64-v8a"
}
Run Code Online (Sandbox Code Playgroud)

我建议使用应用程序捆绑发布