如何获取Android App Bundle中所有已安装的功能?
业界推荐实现方案
优先使用Android官方提供的PackageManager公开API获取拆分功能信息,是目前稳定性、效率、准确率最高的实现方式,无需依赖自定义规则或手动解析文件。
具体实现逻辑
- 通过
PackageManager.getInstalledPackages(0)获取设备上已安装的所有应用包信息 - 针对目标包调用
PackageManager.getSplitInfo(String packageName, int flags)接口,传入PackageManager.GET_SPLITS标记,即可直接获取该包下所有拆分APK的SplitInfo实例列表 - 直接调用
SplitInfo.isFeatureSplit()方法就能判断当前拆分是否为Feature APK,完全基于官方内置标记,无需额外自定义逻辑
你提到的两种方案的缺陷
- 依赖
splitNames命名规则判断:容错性极低,只要应用的Feature APK命名不匹配你预设的规则,就会出现误判、漏判,完全不适合生产环境使用 - 手动解析AndroidManifest.xml:性能损耗大,批量查询场景下耗时会明显升高,还要额外处理APK文件读取权限、格式异常等边缘问题,维护成本很高
兼容性说明
getSplitInfo接口从Android 5.0(API level 21)开始提供支持,目前绝大多数安卓设备的系统版本都高于该要求,如果你有极特殊的低版本兼容需求,再考虑退而求其次使用手动解析Manifest的方案。
内容的提问来源于stack exchange,提问作者DreamCoder
相关产品推荐
相关产品推荐

