在Android Lint检查代码中如何获取Gradle根项目路径?
解决方案
不需要硬编码路径,你可以通过Gradle原生的参数传递能力实现根目录获取,以下是两种可直接落地的方案:
方案1:根项目全局注入系统属性(适配自定义Lint规则场景)
你之前获取的context.project.dir是当前执行Lint检查的子项目路径,Lint运行时默认不会携带根项目信息,需要你主动在根项目配置中注入路径参数:
- 在根项目的
build.gradle中添加如下配置:
subprojects { afterEvaluate { subProject -> // 只对引入了Lint插件的子项目注入参数 if (subProject.plugins.hasPlugin("com.android.lint")) { subProject.lintOptions { // 将根项目路径写入系统属性,Lint运行时可直接读取 System.setProperty("gradle.root.dir", rootProject.rootDir.absolutePath) } } } }
如果你用的是Kotlin DSL(build.gradle.kts),对应配置如下:
subprojects { afterEvaluate { plugins.withId("com.android.lint") { extensions.configure<LintOptions> { System.setProperty("gradle.root.dir", rootProject.rootDir.absolutePath) } } } }
- 在你的Lint逻辑代码中直接读取该系统属性即可:
val rootProjectPath = System.getProperty("gradle.root.dir") println("根项目路径:$rootProjectPath")
方案2:Lint逻辑封装为Gradle插件时直接读取
如果你的Lint项目是独立的Gradle插件,可以在插件的apply方法中直接获取根项目路径,再传递给后续Lint逻辑:
class CustomLintPlugin : Plugin<Project> { override fun apply(project: Project) { // 直接拿到根项目路径 val rootDir = project.rootDir.absolutePath // 后续将rootDir传递给你的Lint逻辑即可 } }
注意事项
- AGP 7.0+版本中
lintOptions已更名为lint,配置时注意对应你的AGP版本调整API调用 - 硬编码路径会导致跨设备、跨仓库协作时失效,不建议使用
内容的提问来源于stack exchange,提问作者Victor Choy
相关产品推荐
相关产品推荐

