Message: com.android.tools.lint.detector.api.Project.getBuildVariant() NoSuchMethodError

news/2024/5/20 5:08:18 标签: android, lint, gradle, version, NoSuchMethod

NoSuchMethodError_0">getBuildVariant() NoSuchMethodError

在我们自定义的lint规则检查代码时,出现了如下错误:

../../../app: Unexpected failure during lint analysis (this is a bug in lint or one of the libraries it depends on)

Message: com.android.tools.lint.detector.api.Project.getBuildVariant()Lcom/android/tools/lint/model/LintModelVariant;

The crash seems to involve the detector com.lkl.android.lint.checks.detector.xml.ApplicationAttrDetector.
You can try disabling it with something like this:
    android {
        lintOptions {
            disable "ApplicationAttribute"
        }
    }

Stack: NoSuchMethodError:DetectorUtils.isBuildVariant(DetectorUtils.kt:39)
←ApplicationAttrDetector.visitElement(ApplicationAttrDetector.kt:60)
←ResourceVisitor.visitElement(ResourceVisitor.java:141)
←ResourceVisitor.visitElement(ResourceVisitor.java:177)
←ResourceVisitor.visitFile(ResourceVisitor.java:125)
←LintDriver.runFileDetectors(LintDriver.kt:990)
←LintDriver.checkProject(LintDriver.kt:898)
←LintDriver.analyze(LintDriver.kt:419)

You can set environment variable LINT_PRINT_STACKTRACE=true to dump a full stacktrace to stdout.

这个时候需要检查我们自定义规则时编译的 gradle pluginlint 版本跟我们项目里依赖的版本是否一致。

我们发现我们自定义的规则使用的版本如下:

gradlePluginVersion = 4.1.2
lintVersion = 27.1.2

而我们项目代码里自定义plugin里依赖的版本:
在这里插入图片描述
发现我们项目里gradle的版本低了,我们去看26.5.4lint版本的api里确实找不到getBuildVariant方法,因此我们有如下修改方案:

  • 降低我们自定义lint规则的项目里编译的gradlelint的版本。

该方案需要改自定义lint的源码,找到旧版本里的替换方案。

升级版本需要解决一些版本兼容问题,不过对于未来发展的话,尽量采用该方案。使用新的版本,才能更好的拥抱变化,体验新的特性。


http://www.niftyadmin.cn/n/1268711.html

相关文章

Leetcode 8:字符串转换整数 (atoi)(超详细的解法!!!)

请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字…

开发groovy plugin、编译时注解时调试技巧

开发groovy plugin、编译时注解时调试技巧 我们在开发Android plugin、编译注解、groovy脚本的时候,都可以参照该文章的方案调试代码。 一、添加远程调试配置 1、打开配置窗口 android studio -> run -> edit configurations… 找到平时运行app的地方 -&…

Leetcode 9:回文数(超详细的解法!!!)

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个…

Leetcode 12:整数转罗马数字(超详细的解法!!!)

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例…

元注解简介

元注解简介 简单介绍一下元注解,本篇文章用到的示例代码:AndroidAnnotationDemo Target Target元注解用来表明我们注解可以出现的地方,参数是一个ElementType类型的数组,所以Target可以设置注解同时出现在多个地方。比如既可以…

Leetcode 13:罗马数字转整数(超详细的解法!!!)

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如&#xff…

Leetcode 14:最长公共前缀(超详细的解法!!!)

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl"示例 2: 输入: ["dog","racecar","…

自定义运行时注解

自定义运行时注解 声明注解 通过Retention(RetentionPolicy.RUNTIME)元注解确定我们注解是在运行的时候使用。通过Target确定我们注解是作用在什么上面的(变量、函数、类等)。确定我们注解需要的参数。 解析注解 找到类对应的所有属性或者方法(至于是找类的属性还是方法就要…