15

我的项目有动态功能模块,我想生成包含动态功能的调试或发布 APK。目前我只能获取基本 APK 文件。

基本上我会像普通应用程序一样生成一个APK文件。但我无法使用动态功能。是的,我知道动态功能将基于 AAB 工作。

有没有办法制作一个普通的(基础+所有模块)APK文件?请帮助解决这个问题。

谢谢

4

3 回答 3

22

我没有在任何地方看到它的文档,但 Android Gradle 构建工具包括为您提取通用 APK 的任务。您可以使用类似的东西:

./gradlew :yourmodule:packageDebugUniversalApk

在引擎盖下,它使用 bundletool 并且与其他答案基本相同,但是能够从 Gradle 中完成它是件好事。

于 2019-09-25T23:04:22.033 回答
17

您可以指定您的按需模块是否需要包含在通常为旧设备生成的通用 APK 中,然后您可以使用 bundletool 从 App Bundle: 生成通用 APK

在这种特殊情况下,您可以使用以下内容:

bundletool build-apks --bundle <bundle_file> --output <APKS file> --ks <key_store> --key-pass <jks password> --ks-key-alias <key_alias> --ks-pass <key password> --overwrite --mode=universal

关键点是包含--mode=universalthis 指示 bundletool 生成一个通用 APK,该 APK 将包含<dist:fusing dist:include="true"/>清单中的所有模块。

以类似的方式,当您在设备上从 Android Studio 运行项目时,使用 Run (Deploy = Default APK) 的默认配置,它包括您所有的按需模块。
相反,当您使用运行配置(部署 = AppBundle 中的 APK)从 Studio 运行应用程序时,您可以选择安装哪些模块。

但是,在这两种情况下,如果您不通过 Play 商店,您将无法测试按需模块下载。

注(2020 年 11 月)

正如下面另一个答案中所报告的,Android Gradle 插件包括一些未记录的任务,可用于生成应用程序的调试和未签名的发布通用 APK。

如果您只需要这种类型的构建,与 Debug 版本相关的任务可以是一个快速的替代方案:

./gradlew :app:packageDebugUniversalApk

此任务将生成(默认情况下)app/build/outputs/universal_apk/debug/app-debug-universal.apk

2019 年 6 月更新

Google 在 I/O Internal App Sharing上介绍了它允许轻松测试您的 App Bundle 和 APK,包括调试版本:

通过内部应用共享,您可以通过在内部应用共享上传页面上传 APK 或应用包,快速与内部团队和测试人员共享应用包或 APK 。

于 2019-02-27T13:51:20.450 回答
0

从Github下载 bundletool jar 文件(最新版本 > 资产 > bundletool-all-version.jar 文件)。将该文件重命名为 bundletool.jar

  1. 从 Android Studio 生成您的 aab 文件,例如:myapp-release.aab
  2. 运行以下命令:

java -jar "path/to/bundletool.jar" build-apks --bundle=myapp-release.aab --output=myapp.apks --ks="/path/to/myapp-release.keystore" --ks -pass=pass:myapp-keystore-pass --ks-key-alias=myapp-alias --key-pass=pass:myapp-alias-pass

  1. 将生成 myapp.apks 文件
  2. 下面是生成通用apk的命令

java -jar bundletool.jar build-apks --bundle=nhl.aab --output=nhl.apks --mode=universal

`

于 2020-11-12T17:21:24.230 回答