Измените Android App Bundle (aab) Содержимое перед развертыванием - PullRequest
0 голосов
/ 27 апреля 2020

У нас есть конвейер сборки и выпуска (Azure Devops), который развертывает наше приложение APK Android в различных средах appcenter.ms. В процессе выпуска мы распаковываем apk, изменяем содержимое с помощью конфигурации среды c, а затем перепаковываем 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, наша структура папок запуталась. folder structure when extracting apk from aab file

Кроме того, ресурсы и манифест уже преобразованы в protobuf, и я не думаю, что смогу их перепроектировать.

1 Ответ

2 голосов
/ 27 апреля 2020

Чтобы отредактировать манифест AAB, вам нужно извлечь файл base/manifest/AndroidManifest.xml из AAB, например,

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 См. Сообщение XmlNode в Resources.proto

После того, как вы внесли изменения в проанализированный прото, повторно сериализуйте прото и повторно вставьте его в то же место с тем же именем в AAB (это просто zip-файл).

Наконец, вам не нужно выравнивать AAB по zip-адресу, поэтому удалите этот шаг.

Возможно, в будущем инструмент позволит вам автоматически преобразовывать вас, подобно тому, как это делает apktool. В то же время, вы можете сделать это вручную таким образом. Надеюсь, это поможет.

...