使用gradle 移除敏感权限

前言

最近要上架Google Play 但是因为有个敏感权限很容易被拒。在这里插入图片描述

想着把权限依赖的库去掉就行了,但是遇到一个恶心的问题。就是这个权限在Android Studio的Merged Manifest 视图中没有,但是在生成的apk中却包含。这样的就不能通过Android Studio来定位权限来自于那个库。

Merged Manifest  视图中没有
包含在生成的清单文件中
在这里插入图片描述

解决方案

通过gradle脚本动态移除 ,放在app模块的build.gradle文件中即可。以下脚本在gradle:8.4.2中运行良好

 void removePermission(File file){
    if(file.isDirectory()){
        file.listFiles().every {
            removePermission(it)
        }
    }
    if(file.name.equals("AndroidManifest.xml")){
        def manifestOutFile =file;
        def manifestContent = manifestOutFile.getText()
        // 删除指定权限,通过替换成不敏感的权限实现

        if (manifestContent.contains('android.permission.QUERY_ALL_PACKAGES')) {
            println "包含敏感权限"
        } else {
            println "不包含敏感权限"
        }
        manifestContent = manifestContent.replaceAll('android.permission.QUERY_ALL_PACKAGES', 'android.permission.INTERNET')
        println('执行替换')
        if (manifestContent.contains('android.permission.QUERY_ALL_PACKAGES')) {
            println "包含敏感权限"
        } else {
            println "不包含敏感权限"
        }
        // 再写回manifest文件
        manifestOutFile.write(manifestContent)
    }
}
afterEvaluate {

 def set=  getTasks().findAll {
        def name=it.name;
        if(name.contains('process')&&name.contains("ManifestForPackage")){

            return true;
        }
        return false;
    }
    println "set="+set
    set.each {
        it.doFirst{
            it.inputs.files.each {
                removePermission(it)
            }
        }

    }

运行结果

成功把敏感权限替换成了非敏感权限。相当于移除了

在这里插入图片描述

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值