【问题标题】:How to generate full APK file including dynamic feature module如何生成包含动态功能模块的完整 APK 文件
【发布时间】:2019-07-17 13:07:24
【问题描述】:

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

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

有没有办法制作一个普通的(基础+所有模块)APK文件?请帮忙。

谢谢

【问题讨论】:

标签: android dynamic-feature


【解决方案1】:

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

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

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=universal,这指示bundletool 生成一个通用APK,该APK 将包含清单中所有具有&lt;dist:fusing dist:include="true"/&gt; 的模块。

以类似的方式,当您在设备上从 Android Studio 运行项目时,使用运行的默认配置(部署 = 默认 APK),它包括您的所有按需模块。
相反,当您使用 Run 配置(部署 = 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,包括调试版本:

借助内部应用共享功能,您可以通过在internal app sharing upload page 上上传 APK 或 app bundle 来快速与内部团队和测试人员共享 app bundle 或 APK。

【讨论】:

  • @pfmaggi,我需要将 apk+aab 上传到 playstore 以查看需求模块的工作原理吗?
  • 不,您只需要上传 android App Bundle。你可以关注这个codelab看看怎么做:codelabs.developers.google.com/codelabs/…
  • @pfmaggi 我怎样才能分享这个进行测试而不是 Google Play Store Beta?
  • 我已经用内部应用共享的信息更新了答案。
  • 使用--mode=universal选项生成时,生成的APK里面有另一个APK,只有里面的APK是正确的,可以安装在真机上。
【解决方案2】:

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

./gradlew :yourmodule:packageDebugUniversalApk

在后台它使用 bundletool 并且与其他答案基本相同,但能够从 Gradle 中完成它是很好的。

【讨论】:

  • 这会生成一个包含所有模块的apk,还是只生成一个带有&lt;dist:fusing dist:include="true"/&gt;标记的模块
  • 根据生成的 apk 大小和对已安装模块的运行时检查,仅包含 &lt;dist:fusing dist:include="true"/&gt; 的模块。
  • 是的,只包括那些模块。这在 bundletool docs 中指定:“注意:bundletool 仅包含在通用 APK 的清单中指定 &lt;dist:fusing dist:include="true"/&gt; 的功能模块。”
【解决方案3】:

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=通用

`

【讨论】:

  • 如何构建.apk文件?
  • 请按照上述步骤操作,这将为您提供包含所有模块的完整 APK
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2012-04-26
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多