使用 gradle 干掉 Android 敏感权限
2020-01-19 本文已影响0人
李云龙_
应国家网安部要求,应用不能收集用户无关的权限,否则会被请去喝茶,但是自己的 AndroidManifest.xml 里的权限好改,但是引用的第三方库中的权限就不好改了,解决方案如下:
1. 查看功能清单文件
打开 AndroidManifest.xml 左下角有 Merged Manifest 选项,在里边选择某行 <uses-permission
标签可以看到合并自哪个第三方库
2. 使用 gradle 去掉敏感权限
在 app 的 build.gradle (不是 project 的 build.gradle) 中添加如下代码:
project.afterEvaluate {
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('android.permission.READ_CONTACTS','android.permission.INTERNET' )
manifestContent = manifestContent.replace('android.permission.WRITE_SETTINGS','android.permission.INTERNET' )
manifestContent = manifestContent.replace('android.permission.READ_PHONE_STATE','android.permission.INTERNET' )
manifestContent = manifestContent.replace('android.permission.ACCESS_WIFI_STATE','android.permission.INTERNET' )
manifestContent = manifestContent.replace('android.permission.READ_LOGS','android.permission.INTERNET' )
manifestContent = manifestContent.replace('android.permission.ACCESS_FINE_LOCATION','android.permission.INTERNET' )
manifestContent = manifestContent.replace('android.permission.ACCESS_COARSE_LOCATION','android.permission.INTERNET' )
manifestContent = manifestContent.replace('android.permission.VIBRATE','' )
file(manifestPath).write(manifestContent)
}
}
}
}
3. 查看是否删除敏感权限成功
AssembleRelease
打包后在手机上安装时可以查看有权限详情,如果有敏感权限则重复第2步
4. 注意
都 replace 称 INTERNET 是为了防止替换为空导致 appt 解析错误而无法传到应用市场