Android App Bundle 技术介绍及详细使用教程 |
您所在的位置:网站首页 › BUNDLE文件怎么打开 › Android App Bundle 技术介绍及详细使用教程 |
一 Android App Bundle 是什么?
Android App Bundle 是一种发布格式 —— 准确地说,是一个带有.aab扩展名的 zip 文件。它包含应用支持的所有设备的代码和资源,例如 DEX 文件、本地代码库、清单文件、各种资源文件等。一旦上传用于发布,Google Play 就会处理 APK 的签名和生成,这个过程称为动态交付 (Dynamic Delivery)。动态交付的用途是,根据用户的设备配置为用户生成优化的 APK。 使用 Android App Bundle 的好处 更小的应用体积 — 减小 APK 体积意味着用户能以更少的下载流量和空间获得应用程序。更少的 APK — 不再需要根据地区、机型等区别管理多个 APK。Google Play 控制台会为开发者自动生成和签署 APK。动态功能模块(Dynamic feature modules) — 仅在用户需要时才在应用程序中加载对应功能,即按需加载。 二 Android App Bundle 包结构app bundle 是经过签名的二进制文件,可将应用的代码和资源组织到不同的模块中,如下图所示。各个模块的代码和资源的组织方式都与 APK 中的相似,之所以如此,是因为每个模块都可以作为单独的 APK 生成。然后,Google Play 会使用 app bundle 生成向用户提供的各种 APK,如 Base APK、Configuration APKs、Feature module APKs 以及multi-APKs(multi-APKs 适用于不支持 Split APK 的设备)。以蓝色标识的目录,如drawable/、values/ 和 lib/表示 Google Play 用来为每个模块创建配置 APK 的代码和资源。 base/, feature1/, and feature2/: 其中每个顶级目录都表示一个不同的应用模块。应用的基本模块始终包含在 App Bundle 的 base 目录中。asset_pack_1/ and asset_pack_2/: 对于需要大量图形处理的大型应用或游戏,可以将资产模块化处理为资源包。Google Play 使用 Play Asset Delivery 用于分发。BUNDLE-METADATA/: 此目录包含元数据文件,其中包含对工具或应用商店有用的信息。此类元数据文件可能包含 ProGuard 映射和应用的 DEX 文件的完整列表。此目录中的文件未打包到应用的 APK 中。Module Protocol Buffer (*.pb) files: 这些文件提供了一些元数据,有助于向各个应用商店(如 Google Play)说明每个应用模块的内容。manifest/: 与 APK 不同,app bundle 将每个模块的 AndroidManifest.xml 文件存储在这个单独的目录中。dex/: 与 APK 不同,app bundle 将每个模块的 DEX 文件存储在这个单独的目录中。res/, lib/, and assets/: 这些目录与典型 APK 中的目录完全相同。当上传 App Bundle 时,Google Play 会检查这些目录并且仅打包满足目标设备配置需求的文件,同时保留文件路径。root/: 此目录存储的文件之后会重新定位到包含此目录所在模块的任意 APK 的根目录。 三 Dynamic feature modules对于大多数应用而言,要支持 Android App Bundle 并不费力。因为应用基础 APK 中包含代码和资源的模块是一个标准的应用模块,当使用 Android Studio 新建项目的时候得到的默认模块就是这样的一个模块,在此模块下的 build.gradle 脚本文件中使用 application 插件 (com.android.application),并为应用的基础功能提供所需的代码和资源。 apply plugin: 'com.android.application' 4.2 版本号与应用升级使用 Android App Bundle,无需关注上传到 Google Play 的多个 APK 的版本号,只需要关注应用基础模块的版本号即可。在基础模块下的 build.gradle 配置版本号,如下示例所示: android { defaultConfig { // ... // 只需要在基础模块下指定应用的版本号 versionCode 1 versionName "1.0" } }上传 App Bundle 之后,Google Play 会使用基础模块中定义的应用版本号,为从这个 App Bundle 生成的所有 APK 的版本号进行重新设置。因此,当设备下载并安装应用时,所有拆分的 APK 都有一样的版本号。 当需要使用新的代码或者资源更新应用时,必须更新应用基础模块下的版本号,并且构建一个完整的新 App Bundle。将新的 App Bundle 上传到 Google Play 后,会重新生成一系列基于基础模块新的版本号的 APK。随后,当用户更新应用时,Google Play 服务端会更新设备上安装的所有 APK 的版本号,设备上所有安装的 APK 都会更新到新版本。 4.3 启用或停用配置 APK 类型默认情况下,支持为每一组屏幕分辨率、cpu 架构和语言成配置 APK。在应用基础模块下的 build.gradle 脚本文件中,通过 android.bundle 代码块可以启用或者禁用对一个(或多个)配置 APK 的支持。如下示例所示: android { ...... bundle { density { // Different APKs are generated for devices with different screen densities; true by default. enableSplit true } abi { // Different APKs are generated for devices with different CPU architectures; true by default. enableSplit true } language { // This is disabled so that the App Bundle does NOT split the APK for each language. // We're gonna use the same APK for all languages. enableSplit true } } } 4.4 构建生成 App Bundle使用 Android Studio 构建 App Bundle 下载安装 Android Studio 3.2 及以上版本;在菜单栏中依次打开Build -> Generate Singned Bundle or APK,在弹出窗口中选择 Android App Bundle,点击下一步选择签名,最终导出 Android App Bundle 文件(.aab)。如果在 build.gradle 中配置了签名选项,可以在 Gradle 窗口中,依次展开 基础模块名 -> Tasks -> build,然后双击下面的 bundle (或者 bundleRelease)执行任务,执行完成之后会在 基础模块名/build/outputs/bundle/目录下找到已签名的 App Bundle 文件(亦可以直接在 Android Studio 的命令行中执行 gradlew bundle 命令构建)获取到最终的 Android App Bundle 文件,上传到 Google Play 进行部署(或者通过 Android Studio 部署 App Bundle 到连接的设备上) 4.5 Bundle 文件部署到设备获取到最终的 Android App Bundle 文件后,通常可用三种方案进行部署 上传到 Google Play 部署通过 Android Studio 部署 App Bundle 到连接的设备使用命令行工具 4.5.1 上传到 Google Play国内暂时比较难以实现 4.5.2 Android Studio 部署因为 Android App Bundle 文件(.aab)只是一种发布格式,并不是可安装文件,因此不能直接安装在测试设备上,但是可以通过 Android Studio 将构建的 App Bundle 文件,部署到已连接的测试设备上(即针对测试设备生成对应配置的 APK 并安装运行),因为 Android Studio IDE 和 Google Play 使用的是同一种工具提取 APK 并安装到设备上。默认情况下,从 Android Studio 部署应用到连接的设备上时,IDE 会构建和部署连接设备对应的配置 APK(因为构建单个配置 APK 比构建所有配置 APK 要快得多)。在 Android Studio 中部署 App Bundle,可以参考一下步骤: 在菜单栏中依次打开Run -> Edit Configurations;在左侧容器中选中一个run/debug 配置(Android Studio 中显示为 Android App 类型);在右侧容器中选中General标签,在Installation Options 下面的Deplay 选项中,选择 APK from app bundle,然后点击Apply保存配置;在菜单栏中依次打开 Run -> Run(或者点击工具栏的运行按钮),Android Studio 就会构建 App Bundle,并且根据生成的 App Bundle 为连接的设备生成对应的配置 APK 并安装运行。注意事项:使用 Android Studio 测试部署 App Bundle 时,并不会生成 APK 文件,而是直接安装到连接的设备并运行,如果需要测试生成配置 APK,请参考:使用 bundletool 为 Android App Bundle 生成 APK 集合。 4.5.3 使用命令行工具在命令行中构建 App Bundle,有两种方法,一种是 Android Gradle插件,另一种是 BundleTools工具。 **Android Gradle 插件:**这个插件由 Google 编写,与 Android Studio 捆绑,并且在 Maven 仓库中可用。插件定义了可在命令行中构建 App Bundle 的命令。 gradlew ::bunbleDebug | bundleRelease注意事项: 不能使用 apksigner 对 App Bundle 进行签名,要对 App Bundle 进行签名,请使用 jarsigner;Android Gradle 插件只能构建 App Bundle,但不能生成配置 APK,如需要生成配置 APK,请参考:使用 bundletool 为 Android App Bundle 生成配置 APK。 BundleTool 工具:相比 Android Gradle 插件而言,BundleTool 工具生成 App Bundle 要复杂得多,首先要生成 proto 格式的清单和资源(使用 aapt2 编译并链接应用的资源),然后将这些清单和资源打包成 ZIP 文件(文件目录结构与 Android App Bundle 类似),最后使用 bundletool build-bundle --modules=base.zip --output=mybundle.aab命令生成最终的 Android App Bundle 文件(.aab)。具体使用可参考 bundletool 工具使用详解 。 4.6 Demo 演示Android App Bundle 使用示例 五 国内 App Bundle 技术应用Qigsaw 爱奇艺开源的 Android 动态化方案 HMS 动态加载技术 HMS 基于 Android App Bundle 技术,将各种能力当做 dynanic-feature,通过改造 AAB 技术中的按需加载逻辑(Android 原生的 AAB 技术依赖 Play core library 和 play 商店),实现能力 Kit 的动态加载,和在线更新 六 总结App Bundle 主要应用场景:动态加载插件,灵活配置,减小包体积 业务接入 App Bundle 需要的改造点: 客户端将基础业务配置到 base module,扩展功能配置到 feature module后台支持 split APKs的配置、打包、下发 参考文献Android App Bundle 简介 bundletool 工具使用详解 Qigsaw 爱奇艺开源的Android动态化方案 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |