如何在运行时知道 app bundle (.aab) 配置?

Posted

技术标签:

【中文标题】如何在运行时知道 app bundle (.aab) 配置?【英文标题】:How to know app bundle (.aab) config after at run time? 【发布时间】:2020-10-19 23:26:46 【问题描述】:
  bundle 
       density 
           enableSplit true
       
       language 
           enableSplit true
       
       abi 
           enableSplit true
       
   

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

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

【问题讨论】:

【参考方案1】:

您可以通过 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* 属性仅在安装拆分时才有值;否则,当安装单个 APK 时,它们会返回 null。因此,如果您以 pre-L 设备为目标,您可能希望单独处理独立 APK 的情况,在这种情况下,您不能使用已安装拆分的名称来确定已提供哪个 ABI,您必须实际检查APK。

【讨论】:

谢谢,它有帮助。同样***.com/a/53045768/3598052 你的这个解决方案节省了我的时间。

以上是关于如何在运行时知道 app bundle (.aab) 配置?的主要内容,如果未能解决你的问题,请参考以下文章

Apk转Aab(Android App Bundle)

如何使用 Android App Bundle 测试在舞台环境中运行的应用?

APK?不AAB:Android App Bundle

Google Play上架:上传应用强制要求Android App Bundle (AAB) 格式

Google Play上架:上传应用强制要求Android App Bundle (AAB) 格式

Google Play上架:上传应用强制要求Android App Bundle (AAB) 格式