65 lines
2.8 KiB
Groovy
65 lines
2.8 KiB
Groovy
/**
|
||
* 修改 Android 12 因为 exported 的构建问题
|
||
*/
|
||
|
||
android.applicationVariants.all { variant ->
|
||
variant.outputs.each { output ->
|
||
def processManifest = output.getProcessManifestProvider().get()
|
||
println("-------1---- ${processManifest.name} ----------- ")
|
||
processManifest.doLast { task ->
|
||
def outputDir = task.multiApkManifestOutputDirectory
|
||
File outputDirectory
|
||
if (outputDir instanceof File) {
|
||
outputDirectory = outputDir
|
||
} else {
|
||
outputDirectory = outputDir.get().asFile
|
||
}
|
||
File manifestOutFile = file("$outputDirectory/AndroidManifest.xml")
|
||
|
||
|
||
if (manifestOutFile.exists() && manifestOutFile.canRead() && manifestOutFile.canWrite()) {
|
||
def manifestFile = manifestOutFile
|
||
///这里第二个参数是 false ,所以 namespace 是展开的,所以下面不能用 androidSpace,而是用 nameTag
|
||
def xml = new groovy.util.XmlParser(false, false).parse(manifestFile)
|
||
def exportedTag = "android:exported"
|
||
def nameTag = "android:name"
|
||
///指定 space
|
||
//def androidSpace = new groovy.xml.Namespace('http://schemas.android.com/apk/res/android', 'android')
|
||
|
||
def nodes = xml.application[0].'*'.findAll {
|
||
//挑选要修改的节点,没有指定的 exported 的才需要增加
|
||
//如果 exportedTag 拿不到可以尝试 it.attribute(androidSpace.exported)
|
||
(it.name() == 'activity' || it.name() == 'receiver' || it.name() == 'service' || it.name() == 'activity-alias') && it.attribute(exportedTag) == null
|
||
|
||
}
|
||
///添加 exported,默认 false
|
||
nodes.each {
|
||
def isMain = false
|
||
it.each {
|
||
if (it.name() == "intent-filter") {
|
||
it.each {
|
||
if (it.name() == "action") {
|
||
//如果 nameTag 拿不到可以尝试 it.attribute(androidSpace.name)
|
||
if (it.attributes().get(nameTag) == "android.intent.action.MAIN") {
|
||
isMain = true
|
||
println("......................MAIN FOUND......................")
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
it.attributes().put(exportedTag, "${isMain}")
|
||
}
|
||
|
||
PrintWriter pw = new PrintWriter(manifestFile)
|
||
pw.write(groovy.xml.XmlUtil.serialize(xml))
|
||
pw.close()
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
}
|
||
} |