U8SDK——是时候支持App Bundle了

作者: 分类: U8SDK 发布时间: 2021-02-04 19:08 6U8SDK——是时候支持App Bundle了已关闭评论

Google推出Android App Bundle 已经有一段时间了。 根据Google的政策说明 ,预计2021年8月之后,新发布的应用都必须使用Android App Bundle(aab)来上架Google Play Store了。

对于Android App Bundle的原理,Google官方文档已经有了很详细的介绍, 想了解的同学建议直接阅读Google的官方文档。

如果你是使用Android Studio打包,那么你直接在Android Studio中选择构建App Bundle即可将应用打包成aab了。

这篇文章,我们主要介绍如何在U8SDK聚合打包工具中生成aab格式的文件(新版本的U8SDK打包工具已经支持了aab出包)。

一、文件格式介绍

aab——Android App Bundle格式文件,一个有固定目录格式的压缩文件。

我们以一个demo.aab为例,将其解压,我们看下其中的目录结构:

–BundleConfig.pb : 打包bundle的时候,自动生成
–base : base目录
——assets: 对应apk的assets目录
——dex: 原apk中classes.dex,classes2.dex…都放这里
——lib: 原apk中lib目录都放这里
——manifest: 原apk的AndroidManifest.xml放这里,需要是编译后的AndroidManifest.xml
——res:apk中的资源放这里,需要是编译后的资源
——root: apk中相对于根目录的其他资源文件
——resources.pb:编译资源的时候会生成的
——assets.pb:编译bundle的时候会生成的
——native.pb: 编译bundle的时候会生成的

二、如何打包生成aab

了解过U8SDK打包原理的同学应该知道,在U8SDK打包工具中,我们将母包apk反编译,然后合并进去对应的渠道SDK的代码、资源、so文件等,然后再将合并后的内容回编译成最终的apk。

在U8SDK打包工程中直接打出aab的原理其实就一句话——要生成aab,我们只需要将合并后的目录(decompile目录), 转换为上面aab打包需要的资源目录格式即可。

所以整个适配过程如下(想白嫖的同学注意了:鼓励自己动手,这里不贴python脚本,只说原理过程~😄):

1、编译资源

首先,我们需要将decompile目录下的res进行编译。 编译资源我们需要使用aapt2,并且需要将资源编译生成protobuf格式的版本。

使用aapt2编译资源,我们需要先执行compile命令,再执行link命令:

执行上面的命令之后, 我们就在decompile目录下,生成了base.apk。 我们需要将这个apk解压。
解压后里面的目录格式如下:

–res
–AndroidManifest.xml
–resouces.pb

我们就以这个目录作为base目录, 后面拷贝的资源都拷贝到这个目录里面来。

按照上面的bundle目录结构,我们在这个目录下,新建一个manifest目录,然后我们将AndroidManifest.xml拷贝到manifest子目录下。

现在base的目录结构如下:

–res
–manifest
——AndroidManfiest.xml
–resources.pb

2、编译dex

我们打包过程中合并后的代码格式是smali格式, 经过u8sdk打包脚本的自动dex拆分后,在decompile目录下的代码目录结构是smali、smali_classes2、smali_classes3…

我们需要将这些smali目录编译生成对应的classes.dex、classes2.dex、classes3.dex…

我们使用smali.jar进行这步操作,smali.jar可以加U8SDK海外交流群索要(QQ群:1055996444)。U8SDK海外技术群

对所有smali目录执行如下命令,就可以将dex生成到base目录下了

生成之后,base目录结构如下:

–res
–manifest
——AndroidManfiest.xml
–dex
——classes.dex
——classes2.dex
–resources.pb

3、拷贝其他资源

这一步就更简单了, 我们需要将decompile目录下其他对应目录中的内容,直接拷贝到base目录下对应的子目录中即可。 对应的拷贝目录关系如下:

decompile/assets ==> base/assets
decompile/lib ==> base/lib
decompile/unknown ==> base/root

拷贝之后, 我们的base目录结构如下图:

–assets
–lib
–root
–res
–manifest
——AndroidManfiest.xml
–dex
——classes.dex
——classes2.dex
–resources.pb

4、编译bundle

打包生成aab文件,我们需要使用bundletool.jar,这个文件你可以加U8SDK海外交流群索要(QQ:1055996444)。U8SDK海外技术群

上面的base目录结构已经准备好了,我们将这个目录压缩成base.zip,接下来我们就可以使用bundletool.jar生成aab文件了

跟着流程到这里,我们的output.aab就是一个纯正的aab文件啦~

5、签名bundle

如果你需要将bundle发布到Google Play平台,还需要对你的aab文件进行签名, 只能使用jarsigner进行签名哦,不可以使用apksigner。

三、如何测试生成的aab

1、生成apks

打出了bundle之后, 如果我们本地想测试这个bundle的功能是否正常怎么办呢?我们依然使用bundletool.jar来完成。

我们用bundletool.jar将我们的bundle编译生成apks,注意不是apk,是apks。

这样就生成了apks文件,apks文件你可以解压看下,里面是一群根据特性拆分后的apk文件。

2、部署到设备

然后,我们可以将apks部署到设备上,进行安装测试。 我们可以将设备通过USB连上电脑,然后依然使用bundletool命令:

这样就完成了bundle的打包以及本地测试了。 如果你对这块感兴趣或者还有疑问,可以加入U8SDK的海外SDK技术交流群。U8SDK海外技术群

本文出自 U8SDK技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uustory.com/?p=2370

评论功能已经关闭,请加入U8SDK技术群进行讨论和咨询:207609068
Ɣ回顶部
U8SDK技术群 x
技术同学请加入
点击加入