首页 > 解决方案 > 从命令行构建具有动态功能模块的 apk,无需 bundletool

问题描述

我们有几个动态功能模块。我们希望使用 ADB 和 sideload 轻松构建我们的应用程序的调试版本。当我们使用./gradlew app:assembleDebug我们的动态模块时,并不包含在 apk 中。我知道有一种方法可以通过 Android Studio 做到这一点:

在此处输入图像描述

但是有没有办法使用亚行来做到这一点?基本上只是说“包括所有动态功能模块,就好像它们是基本模块的一部分一样”。

我也知道每个开发人员都可以为他们的测试设备组装/构建一个bundletool. 但是这个多步骤的过程减慢了我们这些喜欢 CL gradle 的人的速度。

标签: androidadb

解决方案


要么我一定是在使用旧版本的 Android Gradle 插件,要么我在打电话assemble,而不是install. 使用 AGP3.5.0-beta04调用./gradlew app:installDebug时,运行 bundletool 并自动上传必要的拆分 apk:

...
The APKs have been extracted in the directory: /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942
Installing APKs 'base-xxhdpi.apk, base-master_2.apk, base-en.apk, base-x86_2.apk, my-dynamic-feature-xxhdpi.apk, my-dynamic-feature-master.apk' on 'Nexus_5X_API_25(AVD) - 7.1.1' for app:debug
01:30:05 I/SplitApkInstallerBase: Created install session 1503835220 with options -r -t -S 5653406
01:30:05 I/SplitApkInstaller: Uploading APK /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-xxhdpi.apk to session 1503835220
01:30:05 D/SplitApkInstaller: Executing : cmd package install-write -S 285980 1503835220 0_base-xxhdpi -
01:30:05 V/ddms: execute: running cmd package install-write -S 285980 1503835220 0_base-xxhdpi -
01:30:05 V/ddms: execute 'cmd package install-write -S 285980 1503835220 0_base-xxhdpi -' on 'emulator-5554' : EOF hit. Read: -1
01:30:05 V/ddms: execute: returning
01:30:05 D/SplitApkInstaller: Successfully uploaded base-xxhdpi.apk
01:30:05 I/SplitApkInstaller: Uploading APK /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-master_2.apk to session 1503835220
01:30:05 D/SplitApkInstaller: Executing : cmd package install-write -S 4887264 1503835220 1_base-master__ -
01:30:05 V/ddms: execute: running cmd package install-write -S 4887264 1503835220 1_base-master__ -
01:30:06 V/ddms: execute 'cmd package install-write -S 4887264 1503835220 1_base-master__ -' on 'emulator-5554' : EOF hit. Read: -1
01:30:06 V/ddms: execute: returning
01:30:06 D/SplitApkInstaller: Successfully uploaded base-master_2.apk
01:30:06 I/SplitApkInstaller: Uploading APK /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-en.apk to session 1503835220
01:30:06 D/SplitApkInstaller: Executing : cmd package install-write -S 32342 1503835220 2_base-en -
01:30:06 V/ddms: execute: running cmd package install-write -S 32342 1503835220 2_base-en -
01:30:06 V/ddms: execute 'cmd package install-write -S 32342 1503835220 2_base-en -' on 'emulator-5554' : EOF hit. Read: -1
01:30:06 V/ddms: execute: returning
01:30:06 D/SplitApkInstaller: Successfully uploaded base-en.apk
01:30:06 I/SplitApkInstaller: Uploading APK /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-x86_2.apk to session 1503835220
01:30:06 D/SplitApkInstaller: Executing : cmd package install-write -S 401632 1503835220 3_base-x____ -
01:30:06 V/ddms: execute: running cmd package install-write -S 401632 1503835220 3_base-x____ -
01:30:06 V/ddms: execute 'cmd package install-write -S 401632 1503835220 3_base-x____ -' on 'emulator-5554' : EOF hit. Read: -1
01:30:06 V/ddms: execute: returning
01:30:06 D/SplitApkInstaller: Successfully uploaded base-x86_2.apk
01:30:06 I/SplitApkInstaller: Uploading APK /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/my-dynamic-feature-xxhdpi.apk to session 1503835220
01:30:06 D/SplitApkInstaller: Executing : cmd package install-write -S 15362 1503835220 4_my-dynamic-feature-xxhdpi -
01:30:06 V/ddms: execute: running cmd package install-write -S 15362 1503835220 4_my-dynamic-feature-xxhdpi -
01:30:06 V/ddms: execute 'cmd package install-write -S 15362 1503835220 4_my-dynamic-feature-xxhdpi -' on 'emulator-5554' : EOF hit. Read: -1
01:30:06 V/ddms: execute: returning
01:30:06 D/SplitApkInstaller: Successfully uploaded my-dynamic-feature-xxhdpi.apk
01:30:06 I/SplitApkInstaller: Uploading APK /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/my-dynamic-feature-master.apk to session 1503835220
01:30:06 D/SplitApkInstaller: Executing : cmd package install-write -S 30826 1503835220 5_my-dynamic-feature-master -
01:30:06 V/ddms: execute: running cmd package install-write -S 30826 1503835220 5_my-dynamic-feature-master -
01:30:06 V/ddms: execute 'cmd package install-write -S 30826 1503835220 5_my-dynamic-feature-master -' on 'emulator-5554' : EOF hit. Read: -1
01:30:06 V/ddms: execute: returning
01:30:06 D/SplitApkInstaller: Successfully uploaded my-dynamic-feature-master.apk
01:30:06 V/ddms: execute: running cmd package install-commit 1503835220
01:30:14 V/ddms: execute 'cmd package install-commit 1503835220' on 'emulator-5554' : EOF hit. Read: -1
01:30:14 V/ddms: execute: returning
01:30:14 D/SplitApkInstaller: Successfully install apks: [/var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-xxhdpi.apk, /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-master_2.apk, /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-en.apk, /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/base-x86_2.apk, /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/my-dynamic-feature-xxhdpi.apk, /var/folders/1g/mz8f0hgd0dg8ghy3pd_0llxm0000gn/T/apkSelect457573925930020942/my-dynamic-feature-master.apk]
Installed on 1 device.

推荐阅读