突然收到提示,因为应用使用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); } } } }
还木有评论哦,快来抢沙发吧~