Android 如何获取指定包名已安装Split APK信息(不可用Play Core库)
原生实现获取已安装Split APK信息方案
核心实现逻辑
Android 5.0(API 21)及以上系统原生提供PackageManager相关接口可直接查询指定包名的所有已安装拆分APK信息,无需引入第三方依赖,也不需要调用Play Core库。
核心代码示例
PackageManager packageManager = context.getPackageManager(); String targetPkg = "你要查询的应用包名"; try { // 传入GET_SPLITS标记即可获取拆分APK相关信息 PackageInfo pkgInfo = packageManager.getPackageInfo(targetPkg, PackageManager.GET_SPLITS); // splitNames为null代表当前应用为单APK安装,无拆分包 if (pkgInfo.splitNames == null || pkgInfo.splitNames.length == 0) { // 单APK应用,无需安装额外语言拆分包 return; } // 遍历所有已安装拆分APK for (int i = 0; i < pkgInfo.splitNames.length; i++) { String splitName = pkgInfo.splitNames[i]; // 语言类拆分APK统一遵循 config.<语言标识>的命名规则 if (splitName.startsWith("config.")) { String splitLangTag = splitName.replaceFirst("config\\.", ""); // 此处将splitLangTag和目标新语言标识做匹配即可判断对应语言拆分包是否已安装 // 匹配逻辑可根据你应用商店分发拆分包的命名规则调整 } // 额外可用参数: // pkgInfo.splitCodePaths[i] 对应拆分APK的本地存储路径 // pkgInfo.splitRevisionCodes[i] 对应拆分APK的版本号 } } catch (PackageManager.NameNotFoundException e) { // 目标包名未安装,异常处理 }
注意事项
- 该接口从API 21开始全版本兼容,无需额外权限,仅需要查询的应用包名已安装即可正常获取数据。
- 语言拆分包的命名规则由Android平台统一规范,常见格式为:
- 通用语言层级:
config.zh(适配所有中文地区) - 地区细分层级:
config.zh-rCN(仅适配简体中文中国大陆地区)
可根据你应用商店分发拆分APK的实际命名规则做匹配逻辑调整。
- 通用语言层级:
- 若需获取当前系统新的语言标识,可通过
Locale.getDefault().toLanguageTag()获取系统当前语言标签,和拆分包的语言部分做对应匹配即可。
内容的提问来源于stack exchange,提问作者DreamCoder
相关产品推荐
相关产品推荐

