概述
最近遇到一个问题,公司因为合规的要求需要将app申请的权限收紧,对于不必要的权限下架。但是项目中因为用到了很多第三方库,库里面有定义一大堆权限,所以没办法简单的删删减减来解决这个问题。
实现
println("---------------开始过滤无用权限申请-----------------")
def filterPermissions = []
//filterPermissions.add("android.permission.CAMERA")//照相机权限
filterPermissions.add("android.permission.SEND_SMS")//发送短信
filterPermissions.add("android.permission.WRITE_SMS")//写入消息
filterPermissions.add("android.permission.RECEIVE_SMS")//接手短信
filterPermissions.add("android.permission.READ_CONTACTS")//读取联系人
filterPermissions.add("android.permission.RECEIVE_MMS")//接收彩信
filterPermissions.add("android.permission.SEND_MMS")//发送彩信
//filterPermissions.add("android.permission.CALL_PHONE")//拨打电话权限
filterPermissions.add("android.permission.READ_SMS")//读取短信权限
filterPermissions.add("android.permission.READ_CALL_LOG")//读取通话记录
filterPermissions.add("android.permission.WRITE_CALL_LOG")//写入通话记录
//filterPermissions.add("android.permission.ACCESS_FINE_LOCATION")//定位权限
//filterPermissions.add("android.permission.RECORD_AUDIO")//录音权限
filterPermissions.add("android.permission.BLUETOOTH")//蓝牙权限
filterPermissions.add("android.permission.BLUETOOTH_ADMIN")//开启蓝牙权限
//filterPermissions.add("android.permission.ACCESS_LOCATION_EXTRA_COMMANDS")//模拟位置权限
//filterPermissions.add("android.permission.ACCESS_COARSE_LOCATION")//初略定位权限
//filterPermissions.add("android.permission.READ_PHONE_STATE")//读取手机信息权限
filterPermissions.add("android.permission.AUTHENTICATE_ACCOUNTS")//访问手机账户
filterPermissions.add("android.permission.GET_ACCOUNTS")//访问手机账户
filterPermissions.add("android.permission.WRITE_SETTINGS")//系统设置权限
filterPermissions.add("android.permission.CHANGE_WIFI_STATE")//打开wifi
//filterPermissions.add("android.permission.WAKE_LOCK")//锁屏权限
filterPermissions.add("android.permission.SYSTEM_ALERT_WINDOW")//后台弹出界面
project.afterEvaluate {
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
output.processResources.doFirst { pm->
String manifestPath = output.processResources.manifestFile
def manifestContent = file(manifestPath).getText()
filterPermissions.each {
manifestContent = manifestContent.replace(it+"\"", '\"')
}
file(manifestPath).write(manifestContent)
}
}
}
}