ChatGPT解决这个技术问题 Extra ChatGPT

在设备上安装 Android App Bundle

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

看起来它比简单的 apk 需要更多的步骤:developer.android.com/guide/app-bundle/test

k
keyboardsurfer

简短的回答:

不是直接的。

更长的答案:

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

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

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

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


在这种情况下,考虑到我们无法在 Play-store 上发布调试应用程序,我们将使用 Build bundle(s) 选项,而不是签名的 bundle
我主要是为本地测试做的。
bundletool 的版本(而不是源文件)在这里:github.com/google/bundletool/releases
@ericn 应用程序的初始“发布”正在经历通常的过程。您之后进行的任何内部应用程序共享都不应被评论阻止。
作为参考,this 页面解释了安装 AAB 文件的替代应用选项。
S
Shashank Agrawal

直接从设备安装 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 的密钥库文件

--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 -> 需要安装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"
E
Erti-Chris Eelmaa

对于 MAC:

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

在第三个命令终端显示应用程序的路径后,但该文件夹不可用
@Furquan,显示的路径是您连接设备中的路径。该命令将 apk 安装到您的设备。
不幸的是,此软件需要 macOS Catalina 或更高版本。
T
ToolmakerSteve

您无法将 app bundle [NAME].aab 直接安装到 android 设备上,因为它是发布格式,但是可以从 bundle 中提取所需的 apk 并将其安装到您的设备上,过程如下

从这里下载 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,您将在其中看到所有 apk 的列表

有来自 android 开发者的关于捆绑工具的参考资料 link

https://i.stack.imgur.com/XZonY.png


@CoolMind 签名密钥和密码是当您想从捆绑包中构建一组签名的 apk 并希望在设备上部署 apk 时,请检查更新的答案
没有命名为独立的文件夹,而是命名为拆分
K
Kartikeya_M

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

转到 Edit Configurations 选择 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/…
我可以使用 Android Studio 安装现有的 .aab 文件构建吗?我看到了 WiFi 连接设备,我指定了一个配置,但它说没有指定“模块”?我不知道我在哪里告诉它使用我现有的 .aab(来自 ionic/cordova 框架构建)。
w
whalemare

对于那些想要可以在每台 android 设备上运行的单个 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?”
喜欢它,比提到独立/拆分目录的那个更好
M
Mahesh Jamdade

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

brew install bundletool

运行此命令以提取 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/6f5debbfae2b8183d94ca789d081f026


S
Sandeep Dixit

如果您想在不使用 PLAY STORE 的情况下安装 APP 包,您需要在 Android Studio 将您的构建变体更改为“发布”。

如果您不能自己构建 App 但有一个发布包,请参考最流行的答案。

转到 Android Studio > Build > 选择 Build Variant..

https://i.stack.imgur.com/YIm4E.png

执行此操作后,您的构建配置可能会开始显示错误。这是因为您现在还需要在此配置中提供签名详细信息(这指的是来自 build.gradle 的签名详细信息)

https://i.stack.imgur.com/XQbBZ.png

您可以编辑配置并转到底部的修复按钮,该按钮将要求您填写签名详细信息。

或者您可以编辑 build.gradle 确保您提供 buildTypes {} 和 signingConfigs {}

android {
    signingConfigs {
        release {
            storeFile file('<Your PATH>\\keystore.jks')
            storePassword 'XXXXX
            keyAlias 'XXXXX'
            keyPassword 'xxxxx'
        }
        debug {
           storeFile file('<Your PATH>\\keystore.jks')
            storePassword 'XXXXX
            keyAlias 'XXXXX'
            keyPassword 'xxxxx'
        }
    }
    compileSdkVersion 32
    defaultConfig {
       ....
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug
        {
            signingConfig signingConfigs.debug
        }
    }
    ...


}

dependencies {

    ...
}

在 Android Studio 开始正确反映之前会有一两分钟的延迟。否则,您可以进行干净的重建,然后运行该应用程序。

这次运行应用程序时,它将以发布模式安装在目标设备上。您可能需要一种方法来识别已安装应用程序的构建变体。您可以在应用程序的某处显示构建名称和变体。或者,如果您在某处有一个仅在调试模式下显示的按钮,您可以检查它。


s
sifr_dot_in

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

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

https://i.stack.imgur.com/lqKbp.png


E
Eddie Ruiz

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

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

注意:在 Windows 上,将 gradle 可执行文件替换为 gradlew.bat