在设备上安装 Android App Bundle

Posted

技术标签:

【中文标题】在设备上安装 Android App Bundle【英文标题】:Install Android App Bundle on device 【发布时间】:2018-10-29 08:46:06 【问题描述】:

我使用新的 android App Bundle 格式构建了我的项目。有了 APK 文件,我可以将 APK 下载到我的设备上,打开它,然后立即安装应用程序。我以捆绑包(.aab 格式)的形式下载了我的应用程序,运行 Android 8.1 的 Nexus 5X 无法打开该文件。有什么方法可以像 APK 一样方便地在设备上安装 AAB?

【问题讨论】:

看起来它比一个简单的 apk 需要更多的步骤:developer.android.com/guide/app-bundle/test。 【参考方案1】:

简答:

不直接。

更长的答案:

Android App Bundles 是 Google Play 商店中应用的默认发布格式。但 Android 设备需要 .apk 文件才能安装应用程序。

Play 商店或您正在安装的任何其他来源将从捆绑包中提取 apk,对每个 apk 进行签名,然后将它们安装到特定的目标设备。

从 .aab 到 .apk 的转换是通过bundletool 完成的。

您可以使用Internal App Sharing 将您的应用的可调试版本上传到 Play 商店并与测试人员分享。

【讨论】:

在这种情况下我们会使用 Build bundle(s) 选项,而不是签名的 bundle,因为我们无法在 play-store 上发布调试应用程序 我主要做本地测试。 bundletool 的发布(而不是源文件)在这里:github.com/google/bundletool/releases 目前是错误答案,查看其他答案创建apks文件。 @ericn 应用程序的初始“发布”正在经历通常的过程。您之后进行的任何内部应用共享都不应被评论阻止。【参考方案2】:

直接从设备安装 aab,我找不到办法。

但是有一种方法可以通过您的命令行使用以下documentation 安装它您可以通过BundleTool 将 apk 安装到设备上

根据“@Albert Vila Calvo”的评论,他指出要使用 HomeBrew 安装 bundletools,请使用 brew install bundletool

您现在可以安装从 aab 文件中提取的 apk 并将其安装到设备上

通过下一条命令提取apk文件

java -jar bundletool-all-0.3.3.jar build-apks --bundle=bundle.aab --output=app.apks --ks=my-release-key.keystore --ks-key-alias =alias --ks-pass=pass:密码

参数:

--bundle -> Android Bundle .aab 文件 --output -> 生成的apk文件的目的地和文件名 --ks -> 用于生成 Android Bundle 的 Keystore 文件 --ks-key-alias -> 密钥库文件的别名 --ks-pass -> Alias 文件的密码(请注意密码值前的“pass”前缀)

然后您将拥有一个扩展名为 .apks 的文件 所以现在你需要将它安装到设备上

java -jar bundletool-all-0.6.0.jar install-apks --adb=/android-sdk/platform-tools/adb --apks=app.apks

参数:

--adb -> adb 文件路径 --apks -> 需要安装apks文件

【讨论】:

如果您使用 Mac,您可以使用 Homebrew 安装 Bundletool:brew install bundletool。然后运行如下命令:bundletool build-apks --bundle=./app/release/app.aab --output=./app/release/app.apks --ks-pass=pass:password 指定密钥库的密码。要指定密钥文件的密码,请使用 --key-pass=pass:password 我遇到了同样的问题,我按照您描述的步骤操作,但是,当应用程序安装在我的 android 设备中时,我无法打开它(它会自动打开关闭) 谢谢! --key-pass=pass:... 是必需的,但奇怪的是密码不正确,所以我必须手动输入。在... install-apks --adb=... 之后,它写道:“APK 已在目录中解压缩:...”,但该文件夹不存在,也不会安装在设备上。 示例:C:\Users\Aterr\Desktop\hack>java -jar "C:\Users\Aterr\Desktop\hack\bundletool-all-0.10.3.jar" install-apks --adb="C:\Users\Aterr\AppData\Local\Android\Sdk\platform-tools\adb.exe" --apks="C:\Users\Aterr\Desktop\hack\extractedapks.apks"【参考方案3】:

对于 MAC:

brew install bundletool
bundletool build-apks --bundle=./app.aab --output=./app.apks
bundletool install-apks --apks=app.apks

【讨论】:

第三个命令终端显示应用路径后,文件夹不可用 @Furquan,显示的路径是您连接设备中的路径。该命令将 apk 安装到您的设备上。【参考方案4】:

你不能直接安装app bundle [NAME].aab到android设备,因为它是发布格式,但是有办法从bundle中提取所需的apk并安装到你的设备上,过程如下

    从here下载bundletool 在您的终端中运行它,
java -jar bundletool.jar build-apks --bundle=bundleapp.aab --output=out_bundle_archive_set.apks
    最后一步将生成一个名为out_bundle_archive_set.apks的文件,只需将其重命名为out_bundle_archive_set.zip并解压缩zip文件,跳转到文件夹out_bundle_archive_set > standalones,您将在其中看到所有apks的列表

Android 开发者参考了捆绑工具 link

【讨论】:

它需要一个签名密钥和密码,见***.com/a/52704544/2914140和developer.android.com/studio/command-line/bundletool。 @CoolMind 签名密钥和密码是当您想从捆绑包中构建一组签名的 apk 并希望在设备上部署 apk 时,请检查更新的答案 没有命名为独立的文件夹,而是命名为拆分【参考方案5】:

如果你想从你的 aab 安装 apk 到你的设备进行测试,那么你需要在连接的设备上运行之前编辑配置。

    转到编辑配置 选择 Deploy 下拉菜单并将其从“Default apk”更改为“APK from app bundle”。 应用更改,然后在连接的设备上运行它。进行此更改后,构建时间将增加。

这将直接在从 aab 连接的设备上安装一个 apk。

【讨论】:

这帮助我复制了一个仅在发布版本中出现的错误。原来从 AAB 安装时出现了该错误。非常感谢。 为了澄清,我假设说明和屏幕截图来自 Android Studio? [我使用的是 Xamarin,而不是 Android Studio。我知道大多数开发人员都在使用 Android Studio。] 是的,说明和截图来自android studio 3.6.3。 谢谢,用这种方法修复了本地化错误developer.android.com/guide/app-bundle/…【参考方案6】:

对于那些想要一个可以在每个安卓设备上运行的universal.apk 的人:

brew install bundletool
bundletool build-apks --mode universal --bundle ./app-release.aab --output ./app.apks
mv app.apks app.zip
unzip app.zip

现在,你可以得到你的universal.apk

【讨论】:

很好,但是,问题是“有什么方法可以像 APK 一样方便地在设备上安装 AAB?”【参考方案7】:

有什么方法可以像安装 APK 一样方便地在设备上安装 AAB?

由于安装是由第三方应用程序或移动公司文件管理器(如应用程序)完成的。 因此,即将推出的文件管理器版本将附带“aab”管理工具。

我在 playstore 上搜索了“android aab 安装程序”,找到了一个。故意不命名。 我安装的那个,在线解压包, 但在那之后,这个应用程序无法自行安装这个提取的应用程序(在我的 mi [miui] 设备上)。 但是这个应用程序将在线提取的 apk 保存在手机内存中,我可以从那里安装它。 请记住:Google 的“文件”应用程序无法安装此 apk但我的系统(内置)文件管理器能够。

【讨论】:

【参考方案8】:

这在 Mac 上对我有用。 您需要使用一个名为 bundletool 的工具,如果尚未安装,可以使用 brew 安装它

brew install bundle tool

运行此命令以提取 apks 文件并将其存储在所需位置

bundletool build-apks --bundle=path/to/app-release.aab --output=/path/to/output/app.apks --local-testing

在已连接的 Android 设备上安装

bundletool install-apks --apks=/path/to/output/app.apks

我已经在https://gist.github.com/maheshmnj/6f5debbfae2b8183d94ca789d081f026https://gist.github.com/maheshmnj/6f5debbfae2b8183d94ca789d081f026 中注意到带有输出的完整命令

【讨论】:

【参考方案9】:

使用(在 Linux 上): cd 安卓 ./gradlew assemblyRelease|assemblyDebug

为每种情况生成一个未签名的 APK(用于调试或测试)

注意:在 Windows 上,替换 gradlew.bat

的 gradle 可执行文件

【讨论】:

以上是关于在设备上安装 Android App Bundle的主要内容,如果未能解决你的问题,请参考以下文章

如何从 android app bundle 分发支持版本?

我们应该如何处理由于离线 p2p 安装而导致的 Android App Bundle Resources$NotFoundException 崩溃?

Android 无法将应用程序添加到谷歌商店 APP 或 App Bundle 可用于 64 位设备,但它们只有 32 位本机代码

Android Unsigned App 无法安装在设备上

APK 或 App Bundle 可用于 64 位设备,但它们只有 32 位本机代码

如何在 iOS 设备上运行React Native App