运行后如何知道应用程序捆绑包(.aab)配置?

时间:2020-06-29 18:10:39

标签: android google-play-console android-app-bundle android-app-signing android-multiple-apk

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

我们将在Google Play商店中上传.aab应用程序捆绑包。在安装应用程序之后,我们的后端需要知道为该应用程序安装了哪个特定的ABI版本。

是否有办法知道在运行时安装了哪个ABI,密度或语言版本?

1 个答案:

答案 0 :(得分:2)

您可以通过PackageManager查询安装在设备上的拆分APK的名称。

请参见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*属性仅在安装拆分时才有值;如果安装了单个APK,则它们将返回null。因此,如果您定位到L之前的设备,则可能需要单独处理独立APK的情况,在这种情况下,您无法使用已安装拆分的名称来确定已投放的ABI,您必须实际检查APK。