gradle可通过groovy内置xmlslurper或xmlparser解析外部xml配置文件并注入构建属性:xmlslurper适用于结构清晰的xml,xmlparser适合含命名空间或需遍历的复杂场景;需校验文件存在、捕获异常、显式指定路径,并避免敏感信息硬编码。

Gradle 的 build.gradle 本身是 Groovy(或 Kotlin)脚本,不原生支持直接解析 XML 配置,但你可以用 Java/Groovy 内置的 XML 解析能力读取外部 XML 文件,并把内容转成变量、属性或扩展配置供构建逻辑使用。
用 Groovy 的 XmlSlurper 读取 XML
这是最常用、最轻量的方式,适合结构较清晰的 XML 配置文件(如自定义的 config.xml)。
假设你有如下 config.xml(放在项目根目录或 gradle/ 目录下):
<config>
<app>
<version>1.2.3</version>
<minSdk>21</minSdk>
</app>
<api>
<baseUrl>https://api.example.com</baseUrl>
</api>
</config>
在 build.gradle 中这样读取:
def configXml = file("config.xml")
def xml = new XmlSlurper().parse(configXml)
ext.appVersion = xml.app.version.text()
ext.minSdkVersion = xml.app.minSdk.text() as int
ext.apiBaseUrl = xml.api.baseUrl.text()
之后就能在 build 过程中使用,比如:
android {
defaultConfig {
versionName appVersion
minSdkVersion minSdkVersion
}
}
用 XmlParser 处理更复杂结构或需要命名空间
如果 XML 含命名空间、重复节点或需遍历处理(如多个 <feature></feature>),推荐 XmlParser:
def xml = new XmlParser().parse(configXml)
xml.app.children().each { node ->
if (node.name() == 'version') {
project.ext.versionCode = node.text() as int + 1
}
}
它返回标准的 Node 对象,支持完整 DOM 操作,比 XmlSlurper 更可控。
把 XML 配置注入到 Gradle 属性或 System 属性
想让子项目或插件也能访问,可设为 project.property 或 System.setProperty:
project.setProperty("myApiUrl", xml.api.baseUrl.text())-
System.setProperty("CONFIG_ENV", "prod")(配合 XML 中的环境字段)
注意:System 属性对所有 task 可见,但不能动态重载;project property 更适合跨模块共享。
安全与健壮性建议
实际使用时别忽略这些细节:
- 加
if (configXml.exists())判断文件是否存在,避免构建失败 - 用
try/catch包裹解析逻辑,捕获Exception并给出友好提示 - XML 路径建议用
file("$rootDir/gradle/config.xml")显式指定,避免相对路径歧义 - 敏感字段(如 token)不要硬编码在 XML 中,应通过
gradle.properties或环境变量注入
基本上就这些。不需要额外插件,纯 Groovy 就够用,关键是选对解析器、处理好异常和路径。










