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

访客 244 0

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

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

解决方案

通过查找发现,Sharesdk会生成QUERY_ALL_PACKAGES权限。
关于因QUERY_ALL_PACKAGES权限而导致Google下架apk的问题-第4张图片-谷歌商店上架
根据shareSDK官方推荐配置删除权限并配置对应需要查找的包名的queries,用于查找是否存在该应用
关于因QUERY_ALL_PACKAGES权限而导致Google下架apk的问题-第5张图片-谷歌商店上架
在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);
            }
        }
    }
}

标签: 权限 文件 项目 小路

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~