111

有没有办法通过终端或使用 android studio 从 android app Bundle 生成 apk 文件?

4

9 回答 9

118

到目前为止,没有人提供从 AAB 获取 APK 的解决方案。

此解决方案将生成一个通用二进制文件作为 apk。

  1. 添加--mode=universal到您的bundletool命令(如果您需要签名的应用程序,请根据需要使用 --ks 参数)。

    bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
        --mode=universal
    
  2. 主要步骤:将输出文件名从更改.apks.zip

  3. 解压并探索

  4. 该文件universal.apk是您的应用程序

这个通用二进制文件可能会很大,但对于发送到 QA 部门或在 Google Play 商店以外的任何地方分发应用程序来说是一个很好的解决方案。

于 2019-07-22T15:38:08.363 回答
114

默认情况下,IDE 不使用 app bundle 将您的应用部署到本地设备进行测试

参考bundletool命令

对于调试 apk 命令,

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

对于发布 apk 命令,

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

编辑:

在为 aab 测试我的发布版本时,我一直在使用以下命令(我希望它也对其他人有所帮助):

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

  2. 从 Android Studio 生成您的 aab 文件,例如:myapp-release.aab

  3. 运行以下命令:

    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
    
  4. myapp.apks将生成文件

  5. 确保您的设备已连接到您的机器

  6. 现在运行以下命令将其安装在您的设备上:

    java -jar "path/to/bundletool.jar" install-apks --apks=myapp.apks
    

编辑2:

如果需要.apk从文件中提取单个文件.aab,可以--mode=universalbundletool命令中添加一个额外的参数:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks \
    --mode=universal \
    --ks=/MyApp/keystore.jks \
    --ks-pass=file:/MyApp/keystore.pwd \
    --ks-key-alias=MyKeyAlias \
    --key-pass=file:/MyApp/key.pwd

并执行

unzip -p /MyApp/my_app.apks universal.apk > /MyApp/my_app.apk

这将生成一个/MyApp/my_app.apk可以由任何设备应用程序安装程序共享的文件

于 2018-10-29T06:46:25.917 回答
63

好的,这是我必须做的完整方式:

  1. bundletool-all-0.10.3.jar从此链接下载,下载可用的最新版本

  2. 使用 android studio 创建一个 app bundle 并找到它的路径:

    在我的情况下E:\Projects\Android\Temp\app\build\outputs\bundle\debug\app.aab

  3. 将 bundletools jar 复制到某个位置并获取其路径

在我的情况下E:\Temp\bundletool-all-0.6.0.jar

使用这个命令:

java -jar "BUNDLE_TOOL_JAR_PATH" build-apks --bundle="BUNDLE_PATH" --output=YOUR_OUTPUT_NAME.apks

就我而言,它将是

    java -jar "E:\Temp\bundletool-all-0.6.0.jar" build-apks \
        --bundle="E:\Projects\Android\Temp\app\build\outputs\bundle\debug\app.aab" \
        --output=out_bundle_archive_set.apks
  1. 这将创建一个文件out_bundle_archive_set.apks,将其重命名为 .zip out_bundle_archive_set.zip,解压缩此文件并完成您将拥有多个apk文件

要直接安装在外部设备上,请使用:

java -jar"E:\Temp\bundletool-all-0.6.0.jar" install-apks --apks=out_bundle_archive_set.apks

查看此博客文章了解更多信息。也可以查看官方网站

于 2018-10-29T07:35:32.727 回答
20

人们已经解释了如何使用命令行执行此操作。为了完成,我想我也会展示通过 Android Studio 中的 UI 来完成它的方法。

当您打开“运行/调试配置”时,您可以选择“应用程序包中的 APK”(而不是“默认 APK”)。

看截图:

在此处输入图像描述

于 2018-10-29T12:43:28.957 回答
14

有关更多信息,请参阅 Geek Dashboard

对于那些希望从您的 Android App Bundle 生成单个通用 APK 文件的用户,您必须--universal在运行build-apks命令时使用 flag。

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

其中 bundletool.jar是您在此处下载的 bundletool jar 文件

your_app.aab是您应用的 Android App Bundle

your_app.apks是运行命令后将生成的输出 APK 存档文件。

运行上述命令时,请确保将bundletool.jarAAB 文件放在同一个文件夹中。

现在,您需要更改 your_app。apks文件格式到 your_app。压缩并解压以找到universal.apk文件

在此处输入图像描述

注意–overwrite如果已经存在同名的 APKs 文件,请使用 flag 覆盖。否则,bundletool命令会给你一个致命的错误。

于 2019-08-29T07:52:53.170 回答
12

有一个名为 的工具bundletool,它可以从您的 AAB 文件中创建 APK:

在此处查找有关此工具的详细信息:https ://developer.android.com/studio/command-line/bundletool

但这里有一些从该站点获取的亮点:

构建 APK

当 bundletool 从您的 app bundle 生成 APK 时,它会将它们包含在一个称为 APK 集存档的容器中,该容器使用 .apks 文件扩展名。要从 app bundle 为您的应用支持的所有设备配置生成 APK 集,请使用 bundletool build-apks 命令,如下所示:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

请注意,上面的命令会创建一组未签名的 APK。如果您想将 APK 部署到设备上,您还需要包含应用的签名信息,如下面的命令所示。

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
  --ks=/MyApp/keystore.jks
  --ks-pass=file:/MyApp/keystore.pwd
  --ks-key-alias=MyKeyAlias
  --key-pass=file:/MyApp/key.pwd

安装 APK

bundletool install-apks --apks=/MyApp/my_app.apks

生成一组特定于设备的 APK

bundletool build-apks --connected-device --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
于 2018-10-29T06:49:11.557 回答
12

在 Mac 上,可以使用自制软件轻松完成

brew install bundletool

您可以使用以下命令生成 apk

bundletool build-apks --bundle=aab_path.aab --output=release.apks

上面的命令生成 apks 文件,以后可以提取该文件以提供各种 apk 文件。要查看所有生成的文件,请将扩展名从 .apks 更改为 .zip 并提取文件。

然后您可以在连接的设备上使用此命令安装 apk

bundletool install-apks --apks=release.apks
于 2019-11-06T13:20:57.477 回答
1

这就是我所做的。首先,我在 Mac 上。因此,在本官方指南https://reactnative.dev/docs/signed-apk-android中,请遵循以下步骤。

  1. 运行此命令sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000 ,您可以将 my-upload-key 的名称更改为您的选择
  2. 按照指南设置 gradle 变量
  3. 也按照“将签名配置添加到应用程序的 Gradle 配置”这一点的指南执行相同的操作
  4. 现在,您可以做的事情如下所示,而不是继续(这将生成一个 AAB 文件)。

4.1 我在 Android Studio 中打开同一个项目(android 文件夹)

4.2 从Menu Options > Build > Clean Project

4.3 点击 Make Project 按钮并让它完成(如果你可以运行 using npm run android,那么这应该没有任何问题完成) Make Project

4.4 完成后,点击Menu options > Build > Generate Signed Bundle/APK... Generate Signed Bundle/APK...

4.5 在下一个屏幕中选择 APK 单选按钮,然后单击下一步 选择 APK 选项

4.6 在下一个屏幕中,浏览到您作为第一步生成的密钥库文件,其密码、别名和密码,单击下一步。 最后一步

等待它完成。您可能会看到一些错误,但更重要的是,最后您应该会在右下角看到一个弹出窗口,上面写着“定位”。单击它,您将找到您的 app-release.apk。

祝你好运

于 2021-06-03T09:38:40.060 回答
-5

I think this method much more efficient

enter image description here

于 2020-09-01T14:38:48.027 回答