aab文件和apk之间的转化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了aab文件和apk之间的转化相关的知识,希望对你有一定的参考价值。

参考技术A 2. 转换与安装

使用  bundletool  工具

参考文章

2.1 将 .aab 转换为 .apks

java -jar bundletool-all-1.8.2.jar build-apks --bundle=app-pro-release.aab --output=pet.apks

2.2 .apks 安装

java -jar bundletool-all-1.8.2.jar install-apks --apks=pet.apks

从 aab 文件生成 Apk 文件(Android 应用程序包)

【中文标题】从 aab 文件生成 Apk 文件(Android 应用程序包)【英文标题】:Generate Apk file from aab file (android app bundle) 【发布时间】:2019-04-02 01:30:48 【问题描述】:

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

【问题讨论】:

下面提供的答案仅讨论如何生成 APKS 文件,该文件直接来自 bundletool 文档。有没有人找到从包中获取实际 APK(不是 APKS)文件的方法? @CaptainForge 我的回答就是这样! ***.com/a/57149405/5284155 【参考方案1】:

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

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

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

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

    主要步骤:将输出文件名从.apks更改为.zip

    解压并探索

    文件universal.apk是你的应用程序

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

【讨论】:

如果我想在 Android 内部生成 APK 文件怎么办?有可能吗? 能否使用 .apk 来编辑应用(或至少查看代码)然后重新上传到 Google Play? 你也可以直接构建你连接的设备对应的APK,使用build-apks加上--connected-device,然后bundletool install-apks【参考方案2】:

默认情况下,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 测试我的发布版本时,我一直在使用以下命令(我希望它也对其他人有所帮助):

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

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

    运行以下命令:

    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
    

    myapp.apks 文件将被生成

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

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

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

编辑 2:

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

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 文件,任何设备应用安装程序都可以共享和安装该文件

【讨论】:

“默认情况下”,Studio 没有,但可以轻松完成。请参阅下面的答案。 实际上,这并不能真正回答问题。这会生成一个 APKS 文件,而不是 APK 文件。 APKS 文件不容易安装到设备上,需要 APK 的接收者使用 bundletool 来安装它,或者通过 AS 或其他只有开发人员可能知道的方法。 @CaptainForge 你找到解决办法了吗? 这个命令只会生成 APK 存档文件 (.apks),我们需要将其转换为 .zip 格式并解压缩,以找到大量 APK 文件。正确的方法是使用 --mode:universal 标志。我提交了几次编辑,但不幸的是,他们因为一个奇怪的原因被拒绝了——“编辑偏离了帖子的初衷”。普通审稿人,我正在尝试完成不完整的已接受答案。 您能否在您的答案中添加一键在 Android Studio 中执行此操作的可能性?这比运行这些命令要简单得多。【参考方案3】:

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

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

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

    在我的例子中是E:\Projects\Android\Temp\app\build\outputs\bundle\debug\app.aab

    将 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
    这将创建一个文件 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

查看blog post 了解更多信息。还可以查看official site

【讨论】:

.apks 重命名为 .zip 并解压缩它是我正在寻找的部分。谢谢! 严重:输入 Future 失败,出现错误 java.lang.OutOfMemoryError:Java 堆空间 感谢您的解决方案。但是,将需要更多标志。 --ks--ks-key-alias 具有值 --ks="path_to_your_keystore"--ks-key-alias="key_alias_from_android_studio"【参考方案4】:

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

当您打开“运行/调试配置”时,您可以选择“APK from app bundle”(而不是“默认 APK”)。

看截图:

【讨论】:

无法从 aab 构建 APK,出现以下错误“安装失败。安装失败 重新运行” 在 Shift + F10 之后,它会将应用程序安装到设备上,而不是生成 apk。 如何设置aab的位置?【参考方案5】:

Refer Geek Dashboard for more info.

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

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

在哪里 bundletool.jar是你下载的bundletool jar文件here

your_app.aab 是您应用的 Android App Bundle

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

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

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

注意:如果已经存在同名的 APK 文件,请使用 –overwrite 标志覆盖 APKs 文件。否则,bundletool 命令会抛出一个致命错误。

【讨论】:

越来越严重:输入 Future 失败并出现错误 java.lang.OutOfMemoryError: Java heap space please help【参考方案6】:

有一个名为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

安装 APKs

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

生成设备特定的 APK 集

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

【讨论】:

【参考方案7】:

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

brew install bundletool

你可以使用下面的命令来生成apks

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

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

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

bundletool install-apks --apks=release.apks

【讨论】:

【参考方案8】:

这就是我所做的。 首先,我在 Mac 上。 所以在这个官方指南https://reactnative.dev/docs/signed-apk-android,按照下面的步骤。

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

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

4.2 来自Menu Options > Build > Clean Project

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

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

4.5 在下一个屏幕中选择 APK 单选按钮并单击下一步 Choose APK option

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

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

祝你好运

【讨论】:

【参考方案9】:

我认为这种方法效率更高

【讨论】:

考虑添加更具描述性的回复以配合屏幕截图。

以上是关于aab文件和apk之间的转化的主要内容,如果未能解决你的问题,请参考以下文章

apk反编译工具

苹果手机怎么安装apk文件

安卓应用反编译-APK包反编译

apk反编译方式

android 反编译apk

使用pngquant来缩小你的APK