在部署之前修改Android应用程序包(aab)内容

wqlqzqxt  于 2023-04-28  发布在  Android
关注(0)|答案(3)|浏览(205)

我们有一个构建和发布管道(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

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

另外,资源和清单已经转换为protobuf,我不认为我可以反向工程他们。

ajsxfq5m

ajsxfq5m1#

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

unzip -p app.aab base/manifest/AndroidManifest.xml > AndroidManifest.pb

在这个阶段,尽管它的扩展,清单是在一个协议缓冲区格式(这就是为什么我给它的扩展.pb以上)。因此,你需要找到一个协议缓冲区解析器/编辑器,使您需要的更改。
要解析proto,您需要协议缓冲区的定义,您可以在以下JAR中找到:https://maven.google.com/com/android/tools/build/aapt2-proto/3.6.3-6040484/aapt2-proto-3.6.3-6040484.jar参见Resources.proto中的消息XmlNode
一旦对解析后的proto进行了更改,就重新序列化proto,并在AAB中的相同位置以相同的名称重新注入它(它只是一个zip文件)。
最后,您不需要压缩对齐AAB,因此删除此步骤。
也许在未来的一个工具将允许你自动转换,类似于apktool所做的。同时,你可以手动这样做。希望这对你有帮助。

* 由Lionscribe编辑 *

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

l7wslrjt

l7wslrjt2#

我最近想出了一个修改应用包内容的方法,我用APK和AAB都修改了AAB的内容。

**Step1:**使用apktool从apk中提取AndroidManifest.xml文件。
**Step2:**修改这个提取的manifest文件,您也可以在这一步中修改其他资源,比如图标、字符串资源等。
**Step 3:**现在我们需要将这些修改后的资源转换成protobuf格式,请点击下面的链接。

https://developer.android.com/studio/build/building-cmdline#bundletool-build www.example.com

**Step 4:**解压app bundle内容,用修改后的资源替换现有资源(如manifest等)。
Step 5:最后一个技巧是在压缩包含修改后资源的解压包文件夹内容时使用--no-dir-entries标志,后藤解压包文件夹,执行以下命令。

“zip -r --no-dir-entries ../modified_aab.zip *”

**Step 6:**最后,使用简单的命令将.zip重命名为.aab:mv modified_aab. zip modified_aab.aab

ikfrs5lh

ikfrs5lh3#

编辑其余文件
protoc --decode=aapt.pb.ResourceTable Resources.proto< resources.pb >output.txt
当然
protoc --encode=aapt.pb.ResourceTable Resources.proto< output.txt >resources.pb

相关问题