Android多模块应用插件:如何从LintOptions迁移至Lint
迁移Lint配置至新API方案
你遇到的问题源于AGP 7.0+版本对Lint配置API的调整:原BaseExtension下的lintOptions相关属性已被废弃,官方将Lint配置入口迁移至AndroidComponentsExtension的lint块中。
具体迁移实现
直接替换原有扩展获取方式,改用新的AndroidComponentsExtension来配置Lint参数:
import com.android.build.api.variant.AndroidComponentsExtension import org.gradle.api.Plugin import org.gradle.api.Project class MyPlugin : Plugin<Project> { override fun apply(project: Project) { project.plugins.apply("kotlin-android") // 获取AGP 7.0+提供的AndroidComponentsExtension val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java) // 通过新的lint块配置参数 androidComponents.lint.apply { abortOnError.set(false) // 其他Lint配置示例: // disable.add("UnusedResources") // checkAllWarnings.set(true) // ignoreWarnings.set(false) } } }
兼容旧AGP版本(可选)
如果项目需要兼容AGP 7.0以下版本,可以通过类型判断同时支持新旧API:
import com.android.build.api.variant.AndroidComponentsExtension import com.android.build.gradle.BaseExtension import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.ExtensionContainer class MyPlugin : Plugin<Project> { override fun apply(project: Project) { project.plugins.apply("kotlin-android") val extensions = project.extensions if (isAgp7OrHigher(extensions)) { // 新API逻辑 val androidComponents = extensions.getByType(AndroidComponentsExtension::class.java) androidComponents.lint.apply { abortOnError.set(false) } } else { // 旧API兼容逻辑 val androidExtension = extensions.getByName("android") as BaseExtension androidExtension.lintOptions { isAbortOnError = false } } } private fun isAgp7OrHigher(extensions: ExtensionContainer): Boolean { return try { extensions.getByType(AndroidComponentsExtension::class.java) true } catch (e: Exception) { false } } }
额外注意事项
- 确保插件依赖的AGP版本至少为7.0.0,在插件的
build.gradle.kts中配置:
dependencies { implementation("com.android.tools.build:gradle-api:7.0.0") }
- 新API使用Gradle的
Property类型管理配置,因此需要通过set()方法赋值,而非直接赋值。
内容的提问来源于stack exchange,提问作者suue
相关产品推荐
相关产品推荐

