如何在 运行 时间后知道应用程序包 (.aab) 配置?
How to know app bundle (.aab) config after at run time?
bundle {
density {
enableSplit true
}
language {
enableSplit true
}
abi {
enableSplit true
}
}
我们将在 Google Play 商店上传 .aab 应用程序包。并且在安装应用程序之后,我们的后端需要知道应用程序安装了哪个特定的 ABI 版本。
有没有办法知道在 运行 时安装了哪个 ABI、Density 或语言版本?
您可以通过 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));
}
如果阅读 ApplicationInfo#splitSourceDirs
更方便,您也可以使用 APK 的名称
警告: 请记住,所有 split*
属性只有在安装拆分时才具有值;他们否则 return null
当安装单个 APK 时。因此,如果您的目标是 L 之前的设备,您可能希望单独处理独立 APK 的情况,在这种情况下,您不能使用已安装拆分的名称来确定已提供哪个 ABI,您必须实际检查APK.
bundle {
density {
enableSplit true
}
language {
enableSplit true
}
abi {
enableSplit true
}
}
我们将在 Google Play 商店上传 .aab 应用程序包。并且在安装应用程序之后,我们的后端需要知道应用程序安装了哪个特定的 ABI 版本。
有没有办法知道在 运行 时安装了哪个 ABI、Density 或语言版本?
您可以通过 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));
}
如果阅读 ApplicationInfo#splitSourceDirs
更方便,您也可以使用 APK 的名称警告: 请记住,所有 split*
属性只有在安装拆分时才具有值;他们否则 return null
当安装单个 APK 时。因此,如果您的目标是 L 之前的设备,您可能希望单独处理独立 APK 的情况,在这种情况下,您不能使用已安装拆分的名称来确定已提供哪个 ABI,您必须实际检查APK.