DCloud_App_Array
DCloud_App_Array
  • 发布:2019-07-25 21:44
  • 更新:2022-05-06 15:07
  • 阅读:113299

Android平台App支持CPU类型配置说明

分类:HTML5+

此文档不再维护,请参考新文档地址:https://uniapp.dcloud.io/tutorial/app-android-abifilters

HBuilderX2.7.0+ 调整 云端打包默认不再包含 x86 CPU类型库,减少apk包体积 详情

HBuilderX2.1.5+ 开始支持Android平台的新增适配64位CPU类型,云端打包支持配置App支持的CPU类型
满足Google Play从2019年8月1日起上传的App必需支持64位CPU的要求。
不管5+App、wap2app、uni-app的各种编译模式,均已支持。
上一代HBuilder不支持,请升级更新为HBuilderX。

概要

Android平台配置CPU类型针对的是为了提高运行效率使用C/C++语言开发生成的so库,需要为各cpu类型平台单独编译生成对应指令的so库。Java语言开发的代码运行在虚拟机中,由虚拟机适配CPU类型,不涉及到此问题。

HBuilder/HBuilderX中使用so库的功能(模块)

  • Audio(录音):支持mp3格式
  • Geolocation(定位):百度
  • LivePush(直播推流)
  • Maps(地图):高德、百度
  • OAuth(登录鉴权):新浪微博
  • Push(消息推送):个推、UniPush
  • Share(分享):新浪微博
  • Speech(语音输入):百度,注意:讯飞不支持64位
  • Weex(原生渲染):uni-app(自定义组件模式、nvue页面), 注意:HBuilderX2.1.5及以上版本支持

CPU类型

目前HBuilder/HBulderX适配支持以下主流CPU类型:

  • armeabi-v7a
    第7代及以上的ARM处理器(ARM32位),市面上大多数手机使用此CPU类型。
  • arm64-v8a
    第8代、64位ARM处理器(ARM64位),最近两年新发的设备使用此CPU类型,可以兼容使用armeabi-v7a的so库。
  • x86
    少部分平板使用x86,AS模拟器中选了intel x86时使用x86处理器,以及其它常用三方模拟器通常使用x86

注意:不勾选x86在模拟器上可能无法正常运行,以下是常见模拟器是否需要包含x86的情况

  • 雷电模拟器:
    3.x必须包含x86,否则无法正常运行;4.x无需包含x86。
  • 夜神模拟器:
    必须包含x86,否则无法正常运行
  • MuMu模拟器:
    无需包含x86
  • 逍遥模拟器:
    无需包含x86
  • BlueStacks(蓝叠模拟器):
    无需包含x86
  • 腾讯模拟器(手游助手):
    必须包含x86,否则无法正常运行
  • 其它模拟器:
    未测试验证,建议包含x86,确保在模拟器正常运行

云端打包配置

可视化界面配置

打开项目的manifest.json文件,切换到“App常用其它设置”页面,勾选需要支持的cpu类型:

源码视图配置

打开项目的manifest.json文件,切换到“源码视图”
5+APP项目在 "plus" -> "distribute" -> "google" -> "abiFilters",uni-app项目在 "app-plus" -> "distribute" -> "android" -> "abiFilters" 添加要支持的CPU类型:

"abiFilters":[  
    "armeabi-v7a",  
    "arm64-v8a"  
],

在上面节点配置需要支持的cpu类型,不需要的删除即可,不设置此字段则默认使用armeabi-v7a(ARM32位)

提交Google Play时要求支持64位,请选择"armeabi-v7a"、"arm64-v8a"两个即可。不要勾选“x86”
保存后提交云端打包生效。

查看打包后插件apk支持的CPU类型

使用解压工具打开apk,在lib目录下可以查看到支持的CPU类型,如下图所示:

离线打包配置

配置CPU类型

使用Android studio打开Android原生项目,打开对应项目的build.gradle文件。
在Android -> defaultConfig下添加支持的CPU类型,如下示例:

defaultConfig{  
    ndk {  
            abiFilters 'arm64-v8a','armeabi-v7a'  
        }  
}

注意:离线打包仅支持arm64-v8a、armeabi-v7a、x86三种类型,建议根据自己需求选择打包的CPU类型

CPU类型选择建议

ARM64位(arm64-v8a)CPU可以兼容ARM32的指令,也就是说只选择armeabi-v7a类型的so库也可以在64位手机上运行,只是没有完全发挥CPU的性能。
选择支持的CPU类型时请参考以下建议:

  • 如果不在意apk大小,三种CPU类型都勾选
  • 如果在意apk大小,选择ARM32位即可(几乎在所有ARM指令的所有设备上都可正常运行)
  • 如果要兼容一些平板和模拟器,选择ARM32位和X86
    不是所有模拟都仅支持x86指令,如雷电(4.x)、MuMu等模拟器也是支持ARM指令。

CPU类型错误安装提示

如果打包选择的CPU类型与设备不兼容,会导致无法正常安装。
通过adb命令安装通常会提示如下错误:

Performing Streamed Install  
adb: failed to install android_debug.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

使用Android Studio自带的x86模拟器,将不包含x86 cpu类型的apk拖到模拟器安装时会弹出如下提示框:

HBuilderx2.7.0+ 云端打包默认CPU类型不再包含x86

目前市面上常见的手机都是使用ARM处理器,很少有设备使用x86处理器,因此从HBuilderX2.7.0开始云端打包调整为默认不再包含x86的CPU类型,减少apk包大小:

  • uni-app项目
    基础功能apk减少5M+,使用的三方SDK及uni原生插件越多,减少的包尺寸越大,具体值取决于其包含的x86类型的so库大小
  • 5+App、Wap2App项目
    基础功能apk减少100K+,如果使用的三方SDK中存在so库则减少的尺寸较大,具体值取决于其包含的x86类型的so库大小

注意:大多数模拟器(如夜神)必须包含x86,否则应用启动时可能会白屏,请参考上面“配置CPU类型”章节勾选“x86”

4 关注 分享
多客开源 sonicsunsky zhangbo6248 rysnone

要回复文章请先登录注册

r***@gmail.com

r***@gmail.com

回复 r***@gmail.com :
还是不行
2019-08-29 08:20
r***@gmail.com

r***@gmail.com

回复 r***@gmail.com :
而且使用的是HBuilderX 2.2.2的标准版 和 HBuilderX 2.2.4 alpha 都试过了
2019-08-29 08:20
r***@gmail.com

r***@gmail.com

按照设置 "abiFilters" : [
"armeabi-v7a", / ARM处理器32位/

"arm64-v8a", / ARM处理器64位/

"x86" / 平板,模拟器/

],
都设置过了,打包出来还是只有armeabi-v7a、x86这两个,放进google play,不符合google play 64位应用的规定。。。。请问目前这个解决了么
2019-08-29 08:18
DCloud_App_Array

DCloud_App_Array (作者)

回复 禾禾禾禾 :
默认为:armeabi-v7a、x86
2019-08-26 12:50
禾禾禾禾

禾禾禾禾

默认的是那个?如果都不勾选会怎么样?
2019-08-24 11:10
1***@qq.com

1***@qq.com

回复 DCloud_App_Array :
那只能在googleplay放弃x86了
2019-08-20 15:31
DCloud_App_Array

DCloud_App_Array (作者)

回复 1***@qq.com :
只有使用x86架构cpu的平台或手机无法安装。
2019-08-20 15:24
1***@qq.com

1***@qq.com

回复 DCloud_App_Array :
上架谷歌的时候我选了x86就必须要有x86_64否则就会提示64CPU的错误,我试过,如果不选择x86就没有这个问题了,如果想上架googleplay就不能选择x86,这是不是表示Google Play我的应用在googleplay只能手机下载安装,平板上没办法安装?
2019-08-20 15:16
DCloud_App_Array

DCloud_App_Array (作者)

回复 1***@qq.com :
目前支持x86架构的设备很少,暂时还不支持x86架构的64位。
2019-08-20 15:11
1***@qq.com

1***@qq.com

我刚才看看了googleplay的报错,提示64CPU 的问题,我把x86移除就没问题了,我在Google Play的描述里找到如下信息(出问题的好像是x86当我把x86移除掉就可以了,但是加上x86估计就要加上x86_64,请问hbuiderx配置支持这个x86_64吗?):
要确定应用是否包含 64 位库,最简单的方法就是检查 APK 文件的结构。在编译时,APK 会与应用所需的所有原生库打包在一起。原生库会根据 ABI 而存储在不同的文件夹中。您的应用无需支持所有 64 位架构,但对于您支持的每种原生 32 位架构,则应用都必须包含相应的 64 位架构。
对于 ARM 架构,32 位库位于 armeabi-v7a 中。对应的 64 位库位于 arm64-v8a 中。
对于 x86 架构,请查找 x86(32 位)和 x86_64(64 位)。
2019-08-20 13:16