关于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是否安装的判断-->
	<queries>
        <package android:name="com.tencent.mobileqq"/>
        <package android:name="想要判断的应用包名"/>
    </queries>

经过上述配置,最后生成的xml文件里还是存在QUERY_ALL_PACKAGES权限,在项目build.gradle文件里添加如下代码,删除对应权限即可

//删除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()
                // 需要删除的权限
                manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>', '')
                file(manifestPath).write(manifestContent)
            }
        }
    }
}

参考文档:
https://juejin.cn/post/7114487250510938125
https://blog.csdn.net/Gdeer/article/details/88840980
https://blog.csdn.net/dhl91604/article/details/105969513/

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值