import groovy.xml.XmlUtil
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
//println("=============== ${variant.getBuildType().name.toUpperCase()} ===============")
//println("=============== ${variant.getFlavorName()} ===============")
def vn
if (variant.getFlavorName() != null && variant.getFlavorName() != "") {
vn = variant.name;
} else {
if (variant.getBuildType().name == "release") {
vn = "Release"
} else {
vn = "Debug"
}
}
def taskName = "process${vn}MainManifest";
try {
println("=============== taskName ${taskName} ===============")
project.getTasks().getByName(taskName)
} catch (Exception e) {
return
}
///你的自定義名字
project.getTasks().getByName(taskName).doFirst {
//def method = it.getClass().getMethods()
it.getManifests().getFiles().each {
if (it.exists() && it.canRead()) {
def manifestFile = it
def exportedTag = "android:exported"
def nameTag = "android:name"
///這里第二個(gè)參數(shù)是 false ,所以 namespace 是展開(kāi)的潮罪,所以下面不能用 androidSpace铐刘,而是用 nameTag
def xml = new XmlParser(false, false).parse(manifestFile)
if (xml.application != null && xml.application.size() > 0) {
def nodes = xml.application[0].'*'.findAll {
//挑選要修改的節(jié)點(diǎn)缓呛,沒(méi)有指定的 exported 的才需要增加
//如果 exportedTag 拿不到可以嘗試 it.attribute(androidSpace.exported)
(it.name() == 'activity' || it.name() == 'receiver' || it.name() == 'service') && it.attribute(exportedTag) == null
}
if (nodes.application != null && nodes.application.size() > 0) {
nodes.each {
def t = it
it.each {
if (it.name() == "intent-filter") {
println("$manifestFile \n .....................${t.attributes().get(nameTag)}......................")
}
}
}
}
}
}
}
}
}
}
把這段代碼放到 app的build.gradle 或者創(chuàng)建一個(gè).gradle文件引入 炎滞,這樣就能通過(guò)gradle 日志查看哪里出現(xiàn)android:exported 少了
gradlew -q :app:dependencies
在控制臺(tái)輸入上面命令查看依賴(lài)關(guān)系 app 可以替換你的module 名稱(chēng) 這樣就能找到你的第三方依賴(lài)版本稠诲,升級(jí)依賴(lài)版本到兼容安卓12即可