部署前修改 Android App Bundle (aab) 内容

Cha*_*ell 9 android apk android-app-bundle

我们有一个构建和发布管道 (Azure Devops),可将我们的 APK Android 应用程序部署到各种 appcenter.ms 环境。在发布过程中,我们将apk解压,根据环境特定配置修改内容,然后重新打包apk。

现在,我们尝试使用 Android App Bundle (AAB) 来执行此操作,因此我们无法再使用 apktool。我们如何使用 AAB 实现与 APK 相同的效果?

这是我们工作的apk 版本脚本的一个片段

## NOTE STUFF IS TRUNCATED!!! THIS IS NOT A COMPLETE SCRIPT!!! DO NOT COPY

brew list apktool &>/dev/null || HOMEBREW_NO_AUTO_UPDATE=1 brew install apktool
brew list xmlstarlet &>/dev/null || HOMEBREW_NO_AUTO_UPDATE=1 brew install xmlstarlet

# ... truncated ...

echo "Decompiling $zipPath"
apktool d $zipPath -o "apk"

cd apk

# ... truncated / modify androidmanifest.xml ...

unalignedPath="$apkPath.unaligned"
unsignedPath="$apkPath.unsigned"

cd ..

echo "Repackage apk to $unsignedPath"
apktool b apk -o $unsignedPath

echo "Sign"
jarsigner -keystore $keystorePath -storepass $keystorePass -keypass $keystorePass -verbose -sigalg MD5withRSA -digestalg SHA1 -signedjar $unalignedPath $unsignedPath $keyAlias
jarsigner -verify -verbose -certs $unalignedPath

echo "Zipalign"
$ANDROID_HOME/build-tools/27.0.3/zipalign -f -v 4 $unalignedPath $apkPath

Run Code Online (Sandbox Code Playgroud)

当我们简单地将文件扩展名从 更改为apkaab运行相同的 apktool 时,我们的文件夹结构有点混乱。 从 aab 文件中提取 apk 时的文件夹结构

另外,资源和清单已经转换为 protobuf,我认为我无法对它们进行逆向工程。

Pie*_*rre 13

要编辑 AAB 的清单,您需要base/manifest/AndroidManifest.xml从 AAB 中提取文件,例如

unzip -p app.aab base/manifest/AndroidManifest.xml > AndroidManifest.pb
Run Code Online (Sandbox Code Playgroud)

在此阶段,尽管有扩展名,清单仍采用协议缓冲区格式(这就是我给它.pb上面的扩展名的原因)。因此,您需要找到一个协议缓冲区解析器/编辑器来进行您需要的更改。

要解析原型,您需要协议缓冲区的定义,您可以在此 JAR 中找到它:https ://maven.google.com/com/android/tools/build/aapt2-proto/3.6.3- 6040484/aapt2-proto-3.6.3-6040484.jar 参阅消息XmlNodeResources.proto

对解析的原型进行更改后,重新序列化原型并将其重新注入到 AAB 中具有相同名称的同一位置(它只是一个 zip 文件)。

最后,您不需要压缩对齐 AAB,因此删除此步骤。

也许将来会有一个工具可以自动为您进行转换,类似于 apktool 的功能。同时,您可以通过这种方式手动完成。希望有帮助。

编辑:Lionscribe

简单的分步说明。

  1. 按照上面的说明从 AAB 文件中提取 AndroidManifest.xml 文件。对于此用途,请将名称保留为“ AndroidManifest.xml ”。
  2. 从https://developers.google.com/protocol-buffers/docs/downloads下载 protoc 二进制文件并将二进制文件提取到路径或工作文件夹。
  3. 下载上面引用的jar 文件,使用任何 zip 程序打开 jar,然后复制文件“ Resources.proto ”和“ Configuration.proto ”从 jar 根文件夹复制到您的工作文件夹。
  4. 运行命令protoc --decode=aapt.pb.XmlNode Resources.proto < AndroidManifest.xml > output.txt来解码文件。
  5. 根据您的需要编辑“output.txt”。
  6. 运行protoc --encode=aapt.pb.XmlNode Resources.proto < output.txt > AndroidManifest_new.xml以对新版本进行编码。

  • 我正在尝试按照你的建议去做。您还有其他链接或指南吗?我很难为此找到好的资源。 (2认同)