Как получить versionCode и versionName (значок) файла Android AAB? - PullRequest
2 голосов
/ 10 февраля 2020

Аналогично Получить Android .apk файл VersionName или VersionCode БЕЗ установки apk , я хочу получить versionCode и / или versionName всего с .aab file.

Я пытался просто использовать ответ classi c для .apk files , но вместо этого подставил мой .aab файл, и он не работал:

$ $ANDROID_HOME/sdk/build-tools/29.0.2/aapt dump badging my_aab.aab
ERROR: dump failed because no AndroidManifest.xml found

Я также пытался сбросить xmltree напрямую:

$ $ANDROID_HOME/sdk/build-tools/29.0.2/aapt dump xmltree my_aab.aab base/manifest/AndroidManifest.xml
W/ResourceType(39872): Bad XML block: header size 664 or total size 118110474 is larger than data size 35953
ERROR: Resource base/manifest/AndroidManifest.xml is corrupt

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

В Bundletool есть команда для выгрузки манифеста AAB в XML и даже извлечения определенных c атрибутов манифеста с помощью xpath.

bundletool dump manifest --bundle bundle.aab

И для извлечения только versionCode:

bundletool dump manifest --bundle bundle.aab --xpath /manifest/@android:versionCode

Надеюсь, что поможет.

1 голос
/ 10 февраля 2020
Файлы

.aab хранят свои xml в формате буфера протокола :

В файле apk есть папка манифеста с файлом Android Manifest. xml это в двоичном формате, но в .aab это настоящий XML файл, скомпилированный в формат буфера протокола, потому что это позволяет легко преобразовать его.

И aapt2 имеет convert subcommand, что Converts an apk between binary and proto formats., и он преобразует файл .apk, который содержит только AndroidManifest.xml в формате прото. Таким образом:

# Extract the AndroidManifest.xml directly
# without -p, unzip will recreate the directory structure.
unzip -p my_aab.aab base/manifest/AndroidManifest.xml > AndroidManifest.xml
# Create a dummy .apk with the proto-formatted AndroidManifest.xml
zip proto_version.apk AndroidManifest.xml
# Convert the proto-formatted AndroidManifest.xml into an apk-formatted XML
aapt2 convert proto_version.apk -o version.apk
# Now dump the badging
# I don't know why, but dump badging fails, so add `|| true` to make it succeed
aapt dump badging version.apk || true

К сожалению, последняя команда не удалась:

W/ResourceType(42965): No known package when getting value for resource number 0x7f100000
AndroidManifest.xml:47: error: ERROR getting 'android:icon' attribute: attribute value reference does not exist

Но она печатает versionName и versionCode, как и ожидалось. Вы можете игнорировать ошибку с помощью || true, или вы можете использовать подкоманду dump xmltree, чтобы вывести необработанный XML, что успешно завершается:

aapt dump xmltree version.apk AndroidManifest.xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...