在工作过程中,遇到过由于存在多余权限,导致APK无法过审的情况。直接删除、在manifest中配置,都无法解决问题。最后,通过干预打包时合并的最终manifest的方式解决了问题。
接下来,按照凶狠程度,介绍三个等级删除权限的方式:
直接删除
权限在自身的Manifest中调用了,直接删除掉即可
配置删除
权限在自身的Manifest中没有调用,但是打出来的包仍然存在。
这时,在Manifest中,配置权限属性为remove即可。以经常需要删除的存储相关权限为例:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove"/>
后处理
在进行到第二步之后,打出的包仍然存在这两个权限。很大可能性是工程引入的jar包中存在这两个权限。这时,就需要使用后处理的方式解决。
在工厂的build.gradle文件中的最下方,加入以下内容:
project.afterEvaluate {
project.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('<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>', '')
manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>', '')
println("manifestContent:" + manifestContent)
file(manifestPath).write(manifestContent)
}
}
}
}