Android 出包常见问题

1. Android AAB出包说明

1.1 使用打包工具出包 aab 时,部分场景下需提供 assets pack 资源明细

1、APK 大于 1G,或有自定 assets pack 规则的游戏;
2、部分资源必须存放于 base pack 内的游戏;
注:若未提供JSON文件配置,将会把所有资源打入 base pack 中,若大小超过 150M,工具会提示错误。

1.2 资源大小限制

使用配置后,对未在配置明细中的剩余资源,会全部进入 base pack 中,在生成配置时需酌情考量最终 base pack 的大小,各个大小限制官方原文如下:
https://developer.android.google.cn/guide/app-bundle#size_restrictions

安装应用所需的压缩 APK 的总大小不得超过 150 MB。
https://developer.android.google.cn/guide/app-bundle/asset-delivery#size-limits
1、每个 fast-follow 和 on-demand Asset Pack 的下载大小上限为 512 MB。
2、所有 install-time Asset Pack 的总下载大小上限为 1 GB。
3、一个 Android App Bundle 中的所有 Asset Pack 的总下载大小上限为 2 GB。
4、一个 Android App Bundle 中最多可以使用 50 个资源包。

1.3 各 Asset Pack 资源明细范例及说明(JSON格式)

base_pack_info 模式

配置此选项时,仅数组内资源会被打入 base pack,其余打入 ourpalm_assets pack (install-time) 中;
适用于 部分资源必须打入 base pack 的情况;另外需注意剩余 pack 大小是否超限;
仅适于有经验者使用。

  1. {
  2. "is_contains_unity_layer": false,
  3. "compress_type": "auto",
  4. "base_pack_info": [
  5. "bin"
  6. ]
  7. }

asset_pack_info 模式

配置此选项时,按数组内各组详情分发 pack,分发后剩余资源打入 base pack;
适用于包体较大或含多种自定义分发模式的情况;
注:如果同时配置两种模式,会直接提示失败。

  1. {
  2. "is_contains_unity_layer": false,
  3. "compress_type": "auto",
  4. "asset_pack_info": [
  5. {
  6. "asset_pack_name": "ourpalm_aab_assets_1",
  7. "asset_pack_type": "install-time",
  8. "asset_pack_file_detail": [
  9. "resource/1",
  10. "resource/2"
  11. ]
  12. },
  13. {
  14. "asset_pack_name": "ourpalm_aab_assets_2",
  15. "asset_pack_type": "fast-follow",
  16. "asset_pack_file_detail": [
  17. "resource/3",
  18. "resource/4"
  19. ]
  20. }
  21. ]
  22. }

字段说明

字段 说明
is_contains_unity_layer 是否使用 unity 层级结构(部分 unity 框架项目引用了 aab 插件(unity-gamepad),导致 aab asset pack 下目录结构不同,需特殊备注为 true;默认为 false)
compress_type 资源压缩类型,可选以下字符串值:all, auto, none(all 为全部压缩,auto 为工具根据母包资源压缩,none 为不压缩,其他方式待定;默认为 none)
asset_pack_name asset pack 名称(自定义)
asset_pack_type Google Play 分发方式(install-time,fast-follow,on-demand)
asset_pack_file_detail asset pack 文件列表(使用母包 assets 目录的相对路径,如 assets/html/foo.js,填写 html/foo.js,支持目录配置)

2. Android 打包工具打包时方法数超过限制(65535)

2.1 缘由

​ 由于安卓dex机制限制,每个dex方法数最多为65535。打包工具在二次打包时还需要将其它sdk代码合并进来,就需要安卓母包的dex1的方法数量不要超过4.5万个(预留大约2万的方法数给sdk使用)。

方案2.2是成熟的方案,只是需要特殊处理母包的安卓工程,首选此方案。

​ 而方案2.3则是未经过足够的验证,新项目可以试用。

2.2 使用占位类的解决方案

​ 如果项目工程无法控制dex方法数,可以考虑构造一个java占位类,里面包含2万个函数。如果这个类可以编译到apk的dex1中,则打包工具可以在执行合并sdk代码前,先删除这个占位类,这样就可以空出2万个方法数。

​ 需要在运营后台的渠道配置中,将“largefiledelpath”的值设置为这个java占位类的package name,例如“com.facebook.react.temp”。并且保证这个package name下面只有占位类,打包工具会根据“largefiledelpath”的值,来删除这个package name下的所有占位类。

2.3 使用新的二次打包模式

注意:这是个实验性方案,还未经过较多的实际使用验证,需要进行测试

​ 需要在运营后台的渠道配置中,将“packagetool_merge_mode”的值设置为“1”。再使用打包工具打包时,就不会有方法数超过限制的问题。