在设备上安装Android应用程序包

300

我使用了新的 Android App Bundle 格式构建我的项目。使用 APK 文件,我可以将 APK 下载到设备上、打开并立即安装应用程序。但我下载的是一个捆绑文件(.aab 格式),我的运行 Android 8.1 的 Nexus 5X 无法打开此文件。是否有办法以与 APK 相同便捷的方式在设备上安装 AABs?


2
看起来比一个简单的apk需要更多步骤:https://developer.android.com/guide/app-bundle/test。 - Mike M.
2
供日后参考:https://dev59.com/D1QJ5IYBdhLWcg3w05VM - Henry Woody
15个回答

250

简短回答:

不可以直接使用Android App Bundles。

详细解答:

Android App Bundles是在Google Play Store发布应用的默认格式。但是安装应用程序时需要使用.apk文件。

Play商店或任何其他来源将从包中提取apks,对每个apk进行签名,然后根据目标设备进行安装。

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

您可以使用内部应用程序共享将可调试版本的应用上传到Play商店并与测试人员共享。


在什么情况下,我们会使用“构建捆绑包”选项而不是签名捆绑包,考虑到我们无法在Play商店发布调试应用程序? - Oush
我主要是为了本地测试而这样做。 - Ben Weiss
8
bundletool 的发布版本(而非源文件)在此处提供:https://github.com/google/bundletool/releases - Kari
1
@ericn 应用程序的最初“发布”正在进行常规流程。之后进行的任何内部应用程序共享都不应受审核阻碍。 - Ben Weiss
1
请参考这个页面,了解安装AAB文件的其他应用选项。 - not2qubit
显示剩余4条评论

124

对于MAC:

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

在第三个命令之后,终端显示了应用程序的路径,但该文件夹不可用。 - Furquan
2
@Furquan,显示的路径是您连接设备的路径。该命令会将apk安装到您的设备上。 - Bijoy Thangaraj
很遗憾,此软件需要 macOS Catalina 或更新版本。 - Elad Nava
9
安装 Bundletool 需要大约 2GB 的依赖项... - Alberto M
@Furquan 我认为一旦APK安装到设备上,它会立即删除文件,因为它是临时的。你不需要在使用install-apks命令后手动adb安装。 - eden

85

直接从设备安装aab文件,我找不到方法。

但是有一种方法可以通过命令行安装它,请参考文档,您可以使用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:password

参数:

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

然后您将获得一个扩展名为.apks的文件,现在需要将其安装到设备上

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

参数:

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

37
如果您使用 Mac,您可以使用 Homebrew 安装 Bundletool:brew install bundletool。然后只需像这样运行命令:bundletool build-apks --bundle=./app/release/app.aab --output=./app/release/app.apks - Albert Vila Calvo
3
--ks-pass=pass:password指定密钥库的密码。要为密钥文件指定密码,请使用--key-pass=pass:password。 - jwitt98
我遇到了同样的问题,我按照你描述的步骤操作了,但是当我在我的安卓设备上安装应用后,我无法打开它(它会自动打开然后立即关闭)。 - aName
谢谢!--key-pass=pass:...是必需的,但奇怪的是密码不正确,所以我必须手动输入。在... install-apks --adb=...之后,它会写道:“APK已提取到目录中:...”,但该文件夹不存在,并且无法安装到设备上。 - CoolMind
1
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" - Choletski
如果您可以接受调试版本,您可以跳过所有的密钥/密钥库标志,bundletool 将使用您系统的调试证书。 - amram99

43

因为它是一种发布格式,所以您不能直接安装应用程序包[NAME].aab到Android设备,但有一种方法可以从中提取所需的apk并将其安装到您的设备中,具体步骤如下:

  1. 此处下载Bundletool。
  2. 在终端中运行以下命令:
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,在那里您将看到所有apk的列表。这是来自Android开发人员关于bundle工具的参考link

android developer reference


它需要签名密钥和密码,请参见 https://dev59.com/vFUL5IYBdhLWcg3waHNw#52704544 和 https://developer.android.com/studio/command-line/bundletool。 - CoolMind
@CoolMind 签名密钥和密码是用于构建签名 APK 集合并想要在设备上部署 APK 时使用的。请查看更新的答案。 - Ali Tamoor
8
没有名为"standalones"的文件夹,取而代之的是名为"splits"的文件夹。 - Gopal Singh Sirvi

41

如果您想从aab向设备安装apk进行测试,则需要在运行连接设备之前编辑配置。

  1. 进入“编辑配置”
    enter image description here
  2. 选择“部署”下拉菜单,将其从“默认apk”更改为“来自应用程序包的APK”。enter image description here
  3. 应用更改,然后在连接的设备上运行它。进行此更改后,构建时间将增加。

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


6
这帮助我复制了一个只出现在发布版本中的错误。结果发现该错误只会在从 AAB 安装时出现。非常感谢。 - Cerlin
只是想澄清一下,我假设这些指令和截图是来自Android Studio?[我使用的是Xamarin,而不是使用Android Studio。我意识到大多数开发者都在使用Android Studio。] - ToolmakerSteve
是的,这些指令和截图来自于Android Studio 3.6.3。 - Kartikeya_M
谢谢,使用这种方法修复了本地化的错误。https://developer.android.com/guide/app-bundle/configure-base#disable_config_apks - Sergey Chilingaryan
我能否使用Android Studio安装现有的.aab文件构建?我可以看到WiFi连接的设备,并且我指定了配置,但它说没有指定“模块”?我不知道在哪里告诉它使用我的现有.aab文件(来自ionic/cordova框架构建)。 - Meryan

31

对于那些希望获得单个universal.apk,可以在每个Android设备上运行的人:

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文件?” - sifr software
1
喜欢它,比提到独立/分离目录的那个更好。 - delki8

9

我在Mac上试用过这个方法。需要使用一个叫做bundletool的工具。如果尚未安装,你可以使用brew进行安装。

brew install bundletool

运行此命令,提取并将APK文件存储在所需位置。
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/6f5debbfae2b8183d94ca789d081f026

5

要将aab转换为apk,请按照以下简单步骤进行:

1.从this链接下载bundltool-all-1.14.1.jar。

2.将[your-aab-file-name].aab和bundletool-all-1.14.1.jar移动到桌面上。

3.打开终端并输入此代码cd .\Desktop\,然后按回车键。{这将带您到桌面}

4.现在输入此代码并按回车键:

C:\Users\[Your-user-name]\Desktop\bundletool-all-1.14.1.jar build-apks --bundle=[Your-aab-file-name.aab] --output=app-release.aab.apks --mode=universal

5. 在桌面上会出现一个名为“app-release.aab.apks”的文件,使用WinRAR(或类似的软件)打开它,你就可以得到apk文件,并安装它。


3

适用于Windows 11:

PS C:/folder-with-aab-file> java -jar C:\dev\bundletool-all-1.9.1\bundletool.jar build-apks --bundle=app-release.aab --output=app-release.aab.apks --mode=universal

PS C:/folder-with-aab-file> ren app-release.aab.apks app-release.aab.apks.zip

解压缩zip文件后,apk文件将被命名为:universal.apk


2
如果您在使用Maui,那么目前Visual Studio 2022只会创建AAB文件;但是您可以通过命令行创建APK文件。
请进入项目所在的目录,并运行以下命令:
dotnet publish -f:net6.0-android -c:Release /p:AndroidSigningKeyPass=blah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接