关于因QUERY_ALL_PACKAGES权限而导致Google下架apk的问题

突然收到提示,因为应用使用QUERY_ALL_PACKAGES权限,导致apk上线不了Google,查了一下是2022年7月后Google在高版本上限制了此权限的使用。当然,并不是 QUERY_ALL_PACKAGES 这个权限没有了,而是被列为敏感权限,必须有充分的理由说明,才允许上架 GP,否则还是被一票否决。其实说白了就是大路已经被封了,留了条小路,但是小路只能看,不能走。
在这里插入图片描述
但是检查配置清单文件我们是没有添加此权限的,反编译apk却又存在此权限,或者不用反编译,可以直接在AndroidStudio中查看最后合并的Androidmanifest.xml文件,位于 /app/build/intermediates/merged_manifests/debug/AndroidManifest.xml目录下
在这里插入图片描述
可以看到最后生成的xml文件确实包含此权限
在这里插入图片描述
项目中最后合成的AndroidManifest.xml 中内容的来源:

  • 项目自身 AndroidManifest.xml
  • 子 module 中的 AndroidManifest.xml
  • 依赖中的AndroidManifest.xml
  • gradle 中的代码修改

解决方案

通过查找发现,Sharesdk会生成QUERY_ALL_PACKAGES权限。
在这里插入图片描述
根据shareSDK官方推荐配置删除权限并配置对应需要查找的包名的queries,用于查找是否存在该应用
在这里插入图片描述
在AndroidManifest.xml中添加如下

由于我的应用最后生成的XML文件中包含了微信的判断条件,因此在此处只添加了对QQ是否安装的判断条件。
```xml
``` 
// 在project的afterEvaluate方法中删除QUERY_ALL_PACKAGES权限
project.afterEvaluate {
project.android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processResources.doFirst { pm ->
String manifestPath = output.processResources.manifestFile;
def manifestContent = file(manifestPath).getText(UTF-8);
// 删除QUERY_ALL_PACKAGES权限的代码
manifestContent = manifestContent.replace(, );
// 将修改后的内容重新写入manifest文件
file(manifestPath).write(manifestContent, UTF-8);
}
}
}
}

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注