如何生成包含动态功能模块的完整APK文件

时间:2019-02-23 17:11:54

标签: android dynamic-feature

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

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

有什么方法可以制作普通(基本+所有模块)APK文件?请对此提供帮助。

谢谢

3 个答案:

答案 0 :(得分:5)

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

./gradlew :yourmodule:packageDebugUniversalApk

在后台,它使用bundletool,并且与其他答案基本相同,但是很高兴能够从Gradle进行操作。

答案 1 :(得分:1)

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

在这种情况下,您可以使用类似以下内容的

private async void OnMainActionCommand(object obj)
{
  MainActionCommand.CanExecute(false);
  await _mainActionCommandToRun.ExecuteAsync(null);
  MainActionCommand.CanExecute(true);
}

关键是要包括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 这个指令包工具,以生成一个通用APK,其中将包含清单中所有带有--mode=universal的所有模块。

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

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

答案 2 :(得分: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 =通用

`