前言
最近app隐私政策相关的事情,搞得人真的是一个头两个大啊,公司法务都发来了个几十MB的法律法规文件让我们看,身为开发者居然还要被迫学习法律,真的是醉了呀!写第三方SDK隐私政策相关的文案时,写了个AndroidManifest文件权限列检测的功能,用来查看第三方SDK有没有过渡申请权限。
源码地址
具体实现代码
android {
...
this.project.afterEvaluate {
tasks.matching {
(it.name == "processDebugManifest")
}.each { task ->
checkPermission(task)
}
}
}
checkPermissionList = ["WRITE_EXTERNAL_STORAGE","READ_EXTERNAL_STORAGE","READ_PHONE_STATE","ACCESS_FINE_LOCATION"]
def checkPermission(Task task) {
def warningMap = new HashMap<String, ArrayList<File>>()
def warningList
task.getInputs().files.files.each {File file->
if (file.exists() &&file.name.contains("AndroidManifest.xml") && file.text.contains("uses-permission")){
def androidManifest = new XmlParser().parse(file)
androidManifest["uses-permission"].each {Node node->
checkPermissionList.each { String permission->
if (node.attributes().toString().contains(permission)){
warningList = warningMap.get(permission)
if (warningList == null){
warningList = new ArrayList<File>()
}
warningList.add(file)
warningMap.put(permission,warningList)
}
}
}
}
}
println("检测以下权限:${checkPermissionList}\n")
println("开始打印检测结果\n")
warningMap.entrySet().each {
println("包含${it.key}权限的AndroidManifest:")
it.value.each {File file->
println(file)
}
}
println("\n检测结果打印结束")
}