作者
咱们好,我是怡寶;
本人于18年毕业于湖南农业大学,于2021年6月加入37手游安卓团队;
现在负责于海外游戏发行安卓开发。
背景
上篇文章现已介绍了怎么从apk转aab,适用于大部分的运用,但关于高质量的游戏以及大型运用来说google强制的150MB以上的包“无法上传”成了另外一个应战。需求运用Google 供给Play Asset Delivery 来扩展包体的巨细。
Play Asset Delivery (PAD) 是什么?
Play Asset Delivery (PAD) 将 app bundle 的优势带到游戏中。它答应超越 150 MB 的游戏替换旧版扩展文件 (OBB),办法是将包含游戏所需的一切资源的单个工件发布到 Play。PAD 供给了灵敏的分发模式、自动更新、紧缩和增量修补功能,而且可免费运用。运用 PAD,一切资源包均在 Google Play 上保管和供给,因此您无需运用内容分发网络 (CDN) 向玩家供给游戏资源。
Play Asset Delivery 运用资源包,资源包由资源(如纹路、着色器和声音)组成,但不包含可执行代码。经过 Dynamic Delivery,您能够按照以下三种分发模式自定义怎么以及何时将各个资源包下载到设备上:安装时分发、快速跟进式分发和按需分发。
Android Studio 供给了pad的生成方法,现状是,咱们现已运用了apk转化,现已扔掉了Android Studio带来的集成环境,那么咱们怎么自己构建pad呢?
本文向咱们介绍怎么用指令的方法pad模块,文末供给本文所运用到的东西&python脚本源码
默许咱们现已看过上篇文章 政策东西类-谷歌Android App Bundle(aab)政策海外发行 现已了解了apk转aab的过程。
需求东西
-
bundletool-all-1.6.1.jar
bundletool.jar 是google供给生成&测验aab的东西,gradle打包里边也是运用的这个东西。
获取方法github: github.com/google/bund…
具体文档&运用办法: developer.android.com/studio/comm…
-
aapt2
aapt全称Android Asset Packaging Tool是Android资源打包东西。
获取方法ANDROID SDK: $ANDROID_SDK/build-tools/30.0.3/aapt2
获取方法google maven: dl.google.com/dl/android/…
具体文档&运用办法:developer.android.com/studio/comm…
-
apktool_2.5.0.jar
反编译安卓apk东西。
获取方法github: github.com/iBotPeaches…
-
android.jar
android framework,供给了体系的资源和api。
获取方法ANDROID SDK: $ANDROID_SDK/platforms/android-30/android.jar
-
d8
将java字节码编译成dex字节码
获取方法ANDROID SDK: $ANDROID_SDK/build-tools/30.0.3/d8.bat
具体文档&运用办法:developer.android.com/studio/comm…
构建pad
-
pad目录解析
从Android studio创立一个带有pad module的工程,生成aab,解压aab咱们能够发现,pad的目录结构和base的目录结构简直相同,由AndroidManifest.xml 决定 module 的性质。 那么咱们是不是就能够构建一个如出一辙的目录结构然后打进aab里边应该就能够了?
经过测验发现,以下的文件是在构建中必需要的 (assets能够不用,可是咱们的意图是为了扩展资源,所以也算必要)
pad/ ├── assets ├── dex ├── manifest
这个目录看过上篇文章的应该很熟悉,他就是上一遍文章构建base.zip前所需物料的简版(少了一些非必要文件夹),已然这样,那么咱们构建他最开始的目录结构和源物料,目录结构应该是这样的
pad/ ├── assets ├── AndroidManifest.xml ├── classes.dex
-
构建AndroidManifest.xml
上面说了AndroidManifest.xml是决定module性质的文件,咱们能够根据pad官方给到的配置信息创立一个自己的AndroidManifest.xml,也能够仿制Android Studio中自动创立的。大概是这样的:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:dist="http://schemas.android.com/apk/distribution" android:isFeatureSplit="true" split="$padName" package="$applicationId"> <dist:module dist:instant="false" dist:title="$padName"> <dist:delivery> <dist:install-time/> </dist:delivery> <dist:fusing dist:include="true"/> </dist:module> </manifest>
split ,dist:title : 为模块的名。
package: 包名,需求和apk的相同,不然编译不经过
install-time
资源包在用户安装运用时分发。这些资源包以拆分 APK(APK 集的一部分)的形式供给。它们也称为“预先”资源包;您能够在运用启动时当即运用这些资源包。这些资源包会添加 Google Play 商店上列出的运用巨细。用户无法修正或删去这些资源包。 -
构建dex
经过AndroidManifest.xml生成R.java
aapt2 link --proto-format -o R_base.apk -I android_30.jar --min-sdk-version 19 --target-sdk-version 30 --version-code 1 --version-name 1.0 --manifest AndroidManifest.xml --auto-add-overlay --java java
经过javac编译R.java
javac -source 1.7 -target 1.7 java\wang\i333\pad_demo\R.java
经过d8生成dex
d8 java/wang/i333/pad_demo/R.class
-
构建assets
经过从base里边的assets里边剪切,或许从其他地方复制获得assets目录
构建pad.zip
经过上面的过程,咱们会得到一个
pad/
├── assets
├── AndroidManifest.xml
├── classes.dex
其实能够把 classes.dex 和AndroidManifest.xml 提取成一个模板,每次复制的时分修正AndroidManifest.xml里边的包名,这样就不用每次去构建dex了,每次只需求把assets文件夹修正就能够了。
将这些目录构建成pad.zip ,没有的文件夹不需求在去创立。省掉构建过程,能够阅读上一篇文章。
生成aab+pad的包
经过上篇文章咱们获取到一个base.zip ,这篇文章获取到一个pad.zip ,经过bundletool构建就生成了带pad的aab包了
java -jar bundletool-all-1.6.1.jar build-bundle --modules=base.zip,pad.zip --output=pad_demo.aab
–modules:多个module打包成aab。
测验
省掉测验过程,能够阅读上一篇文章。
也能够经过解析检查aab里边的模块有哪些
java -jar bundletool-all-1.6.1.jar validate --bundle pad_demo.aab
获取东西&源码
github.com/37sy/build_…
源码中有供给windows可执行东西,合作bat脚本能够直接在电脑上操作。
后续也会供给web在线转换东西,敬请期待………
结束语
过程中有问题或许需求交流的同学,能够扫描二维码加老友,然后进群进行问题和技术的交流等