Как узнать конфигурацию пакета приложений (.aab) после выполнения?

  bundle {
       density {
           enableSplit true
       }
       language {
           enableSplit true
       }
       abi {
           enableSplit true
       }
   }

Мы собираемся загрузить пакет приложений .aab в Google Play Store. А после установки приложения наш бэкэнд должен знать, какая конкретная версия ABI установлена ​​для приложения.

Есть ли способ узнать, какая версия ABI, Density или Language установлена ​​во время выполнения?




Ответы (1)


Вы можете запросить имена разделенных APK, установленных на устройстве, через PackageManager.

См. https://developer.android.com/reference/kotlin/android/content/pm/PackageInfo?hl=en#splitnames

/** Returns the set of installed APKs or an empty set if a single APK is installed. */
private Set<String> getInstalledSplits() {
  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    return Collections.emptySet();
  }

  PackageInfo packageInfo;
  try {
    PackageManager pm = context.getPackageManager();
    packageInfo = pm.getPackageInfo(context.getPackageName(), GET_META_DATA);
  } catch (NameNotFoundException e) {
    throw new RuntimeException(e);
  }
    
  String[] installedSplits = packageInfo.splitNames;
  if (installedSplits == null) {
    return Collections.emptySet();
  }

  return new HashSet<>(Arrays.asList(installedSplits));
}

Вы также можете использовать имя APK, если это удобнее, прочитав ApplicationInfo. #splitSourceDirs

ВНИМАНИЕ: имейте в виду, что все атрибуты split* имеют значение только тогда, когда установлены расщепления; в противном случае они возвращают null, если установлен один APK. Поэтому, если вы нацеливаетесь на устройства pre-L, вы можете захотеть обработать случай автономного APK отдельно, и в этом случае вы не можете использовать имя установленных разделов, чтобы определить, какой ABI обслуживается, вам нужно фактически проверить APK.

person Pierre    schedule 30.06.2020
comment
Спасибо, помогло. Точно так же stackoverflow.com/a/53045768/3598052 это ваше решение сэкономило мне время. - person Chitrang; 01.07.2020