Файлы
.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