Учитывая файл APK, можно ли узнать, является ли он частью разделенных файлов APK или автономным? - PullRequest
4 голосов
/ 11 мая 2019

Фон

Иногда при создании резервной копии некоторых APK-файлов приложения вы можете заметить, что они состоят из нескольких APK-файлов, то есть разделенных APK-файлов (AKA app-bundle).

Проблема

Я хочу знать, когда кто-то отправляет пользователю файл APK, если он действительно автономный или является частью разделенных файлов APK.Причиной является другая процедура и даже предупреждение о такой вещи, потому что разделенные файлы APK не предназначены для установки как нормальные.

То, что я пробовал

Учитывая PackageManager class ( здесь ), я не могу найти способ для getPackageArchiveInfo , чтобы получить такую ​​информацию.

Существует splitNames и splitRevisionCodes, но оба значения равны нулю.

Мой вопрос

Возможно ли, учитывая один файл APK, проверить, является ли он частью несколькихразделить файлы APK?


РЕДАКТИРОВАТЬ: так что благодаря здесь , я нашел, как это сделать для основного APK файлов разделения APK ("base.APK"):

    val packageInfo = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_META_DATA)
    val isSplit = packageInfo.applicationInfo.metaData.getBoolean("com.android.vending.splits.required", false)

Но, как и для остальных разделенных apk-файлов, использование getPackageArchiveInfo для них просто вернет null.Я не могу найти, как разобрать манифест их, чтобы найти атрибут "split".

Так что мой вопрос сейчас:

Учитывая остальные файлы APK, как я могупроанализируйте их, чтобы убедиться, что они действительно являются разделенными файлами APK, которые принадлежат файлу base.APK?

1 Ответ

2 голосов
/ 11 мая 2019

Это возможно для APK, созданных в Google Play, поскольку элемент метаданных добавляется в манифест Android базового APK, в котором указано, что для правильной работы приложения требуется разделение.

Я считаю, что метаданные называются com.android.vending.splits.required.

Обратите внимание, что метаданные присутствуют только в базовом APK, а не в config split APK. Но в APK для split config есть атрибут "split", указанный в манифесте.

Это не задокументировано, поскольку это внутренняя деталь реализации, но вы можете использовать ее, если это поможет.

Источник: я инженер Google, работаю над комплектом приложений.

...