添加自定义 Lint 规则

Posted

技术标签:

【中文标题】添加自定义 Lint 规则【英文标题】:Adding Custom Lint Rules 【发布时间】:2014-10-30 02:02:20 【问题描述】:

我正在关注此 (http://tools.android.com/tips/lint-custom-rules) 页面上的教程。 我被困在这一步:

lint --show MyId

我收到以下错误消息,有什么想法吗?

无法加载自定义规则 jar 文件 /Users/me/.android/lint/CustomLintRule.jar java.lang.NoSuchMethodError: com.android.tools.lint.detector.api.Issue.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/tools/lint/detector/api/Category;ILcom/ android/tools/lint/detector/api/Severity;Ljava/lang/Class;Ljava/util/EnumSet;)Lcom/android/tools/lint/detector/api/Issue; 在 googleio.demo.MyDetector.(MyDetector.java:16) googleio.demo.MyIssueRegistry.getIssues(MyIssueRegistry.java:15) 在 com.android.tools.lint.client.api.JarFileIssueRegistry.(JarFileIssueRegistry.java:93) 在 com.android.tools.lint.client.api.JarFileIssueRegistry.get(JarFileIssueRegistry.java:70) 在 com.android.tools.lint.client.api.LintClient.addCustomLintRules(LintClient.java:911) 在 com.android.tools.lint.Main.getGlobalRegistry(Main.java:642) 在 com.android.tools.lint.Main.run(Main.java:204) 在 com.android.tools.lint.Main.main(Main.java:113) id 或类别无效 “我的身份证”。

【问题讨论】:

看起来您正在针对 API 的一个版本进行编译并针对另一个版本运行。请参阅创建问题部分中有关使用工具 22 的说明。 当我通过 lint --version 在终端检查时,我使用 lint-api-23.0.2.jar 和我的 lint 版本 23.0.2 编译了 jar。仍然出现同样的错误。 你能发布你得到的代码吗?我猜您正在调用 #create 的 7 个参数版本,因为它找不到那个版本 - 但 Tools 22+ 版本需要 8 个参数,这意味着您在构建时的类路径可能有一些错误。跨度> 实际上我在tools.android.com/tips/lint-custom-rules 上使用完全相同的项目。所以我的代码是,public static final Issue ISSUE = Issue.create("MyId", "我对问题的简要总结", "我对检测器查找内容的总结", "我对问题的详细解释", Category. CORRECTNESS, 6, Severity.WARNING, new Implementation(MyDetector.class, Scope.RESOURCE_FILE_SCOPE)); 【参考方案1】:

我也一样。

    我使用的是 mac 和 AndroidStudio 0.8.6。 我在 Eclipse 中使用 lint-api.jar 导出了“customrule.jar” “/Applications/Android Studio.app/sdk/tools/lib”。 规则的 Eclise 项目使用 lint-api.jar 编译得很好。 但是,当我运行“lint --show MyId”时,我得到了同样的错误。

所以我下载了 adt-bundle 并尝试在其中使用“lint-api.jar”并且错误消失了。

我认为 AndroidStudio 中包含的“lint-api.jar”有问题...

【讨论】:

嗯,我会尽快尝试的。 而且,这个提示是解决问题的方法吗? 使用最新的lint-api.jar 例如来自android-sdk\tools\lib 也为我解决了这个问题。此特定异常是由前段时间 API 更改引起的。它在“创建问题”部分下的tools.android.com/tips/lint-custom-rules 上进行了描述。 使用来自 adt-bundle-mac-x86_64-20140702 的 lint-api.jar,仍然得到同样的错误。

以上是关于添加自定义 Lint 规则的主要内容,如果未能解决你的问题,请参考以下文章

Android 自定义 lint 规则未检测到任何问题(对于导入)

使用 Angular 7 和 `ng lint` 在 TypeScript 中自定义 TSLint 规则

编写自定义 lint 警告以检查自定义注释

Android 自定义Lint 基础教程

SonarQube添加自定义规则:实践验证

在 Eureka 中向自定义规则添加规则