使用 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 解析错误而无法传到应用市场

上一篇下一篇

猜你喜欢

热点阅读