在打包APK时,删除AndroidManifest.xml中ContentProvider声明即可,示例代码如下(可放在app/build.gradle中):
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
output.processManifestProvider.getOrNull().doLast { task ->
def directory = task.getMultiApkManifestOutputDirectory().get()
def manifestPath = "$directory/AndroidManifest.xml"
def xml = new groovy.xml.XmlParser().parseText(file(manifestPath).getText())
NodeList list = xml.application[0].provider
for (Node node : list) {
def map = node.attributes()
for (Map.Entry<Object, Object> entry : map.entrySet()) {
def localPart = entry.getKey().getLocalPart()
if ("name" != localPart) {
continue
}
String value = entry.getValue()
// 移除AndroidX声明的ContentProvider,如androidx.startup.InitializationProvider
if (value.contains("androidx") || value.contains("UtilsFileProvider")) {
node.parent().remove(node)
break
}
}
}
def serialize = groovy.xml.XmlUtil.serialize(xml)
file(manifestPath).write(serialize)
}
}
}
前人栽树后人乘凉,感谢大佬(此文章中某些方法在Gradle高版本中没有了): www.jianshu.com/p/21122d666…