Google Play更新被拒:要求移除REQUEST_INSTALL_PACKAGES,但清单无该权限
问题分析与解决方案
1. queries标签不会触发REQUEST_INSTALL_PACKAGES权限检测
你遇到的拒审大概率是Google Play自动化检测的误判,或者存在未注意到的权限残留:
- 再次确认合并后的AndroidManifest.xml(路径一般是
app/build/intermediates/merged_manifests/[variant]/AndroidManifest.xml),确保确实没有android.permission.REQUEST_INSTALL_PACKAGES条目; - 用Gradle命令排查依赖库:执行
./gradlew app:dependencies,检查是否有第三方依赖偷偷引入了这个权限,若有则用tools:node="remove"在主清单中移除该权限。
2. 同签名应用的安装检测替代方案
因为两款应用使用同一签名密钥,完全不需要依赖queries标签就能安全检测目标应用是否安装,具体实现如下:
private boolean isTargetAppInstalled(Context context) { String targetPackage = "com.package.of.my.other.game"; PackageManager pm = context.getPackageManager(); try { // 获取目标应用和当前应用的签名信息 PackageInfo targetPkgInfo = pm.getPackageInfo(targetPackage, PackageManager.GET_SIGNATURES); PackageInfo currentPkgInfo = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); // 对比签名一致性(确保是自有应用) for (Signature targetSig : targetPkgInfo.signatures) { for (Signature currentSig : currentPkgInfo.signatures) { if (Arrays.equals(targetSig.toByteArray(), currentSig.toByteArray())) { return true; } } } } catch (PackageManager.NameNotFoundException e) { // 目标应用未安装 return false; } return false; }
注:Android 11+的包可见性规则中,同签名应用默认处于可见范围,因此即使没有
queries条目,也能正常调用getPackageInfo获取目标应用信息。
3. 拒审申诉建议
在Google Play控制台的申诉页面中明确说明:
- 应用从未声明
REQUEST_INSTALL_PACKAGES权限,附上合并后的Manifest文件内容或截图; - 本次更新仅修改商店图标,未变更APK代码或权限配置;
queries条目仅用于检测自有同签名应用,不存在安装外部APK的行为,符合Google Play政策。
内容的提问来源于stack exchange,提问作者AlexeyGorovoy
相关产品推荐
相关产品推荐

