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之间的转化的主要内容,如果未能解决你的问题,请参考以下文章
构建 aab 时的文件大小 (mb) 比在 android 中使用 apk 构建时更大