[我们有一个构建和发布管道(Azure Devops),可将我们的APK Android应用部署到各种appcenter.ms环境。在发布过程中,我们将apk打包,使用特定于环境的配置修改内容,然后重新打包apk。
现在,我们正在尝试使用Android App Bundle(AAB)进行此操作,因此我们将无法再使用apktool。如何使用AAB实现与APK一样的效果?
这是我们的脚本的[[working 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,我认为我不能对其进行反向工程。
base/manifest/AndroidManifest.xml
,例如unzip -p app.aab base/manifest/AndroidManifest.xml > AndroidManifest.pb
[在此阶段,清单仍是协议缓冲区格式(这就是为什么我在上面给它扩展名.pb
的原因)。因此,您将找到一个协议缓冲区解析器/编辑器来进行所需的更改。要解析原型,您需要定义协议缓冲区,您可以在此JAR中找到它的定义:https://maven.google.com/com/android/tools/build/aapt2-proto/3.6.3-6040484/aapt2-proto-3.6.3-6040484.jar
请参见
一旦对解析后的原型进行了更改,请重新序列化该原型,然后将其重新插入到AAB中相同名称的同一位置(这只是一个zip文件)。XmlNode
中的消息Resources.proto
最后,您不需要将AAB压缩对齐,因此请删除此步骤。
也许将来某个工具会自动允许您进行转换,类似于apktool所做的那样。同时,您可以通过这种方式手动进行操作。希望有帮助。