ljf*_*008 10 java android lint
我是Android开发人员.我已经通过实现新的XXXDetector和XXXIssueRegistry设计了我自己的lint规则,这是我的源代码片段:
我的XXXIssueRegistry文件:
public class MyIssueRegistry extends IssueRegistry {
@Override
public List<Issue> getIssues() {
System.out.println("!!!!!!!!!!!!! ljf MyIssueRegistry lint rules works");
return Arrays.asList(AttrPrefixDetector.ISSUE,
LoggerUsageDetector.ISSUE);
}
}
Run Code Online (Sandbox Code Playgroud)
我的XXXDetector文件:
public class LoggerUsageDetector extends Detector
implements Detector.ClassScanner {
public static final Issue ISSUE = Issue.create("LogUtilsNotUsed",
"You must use our `LogUtils`",
"Logging should be avoided in production for security and performance reasons. Therefore, we created a LogUtils that wraps all our calls to Logger and disable them for release flavor.",
Category.MESSAGES,
9,
Severity.ERROR,
new Implementation(LoggerUsageDetector.class,
Scope.CLASS_FILE_SCOPE));
@Override
public List<String> getApplicableCallNames() {
return Arrays.asList("v", "d", "i", "w", "e", "wtf");
}
@Override
public List<String> getApplicableMethodNames() {
return Arrays.asList("v", "d", "i", "w", "e", "wtf");
}
@Override
public void checkCall(@NonNull ClassContext context,
@NonNull ClassNode classNode,
@NonNull MethodNode method,
@NonNull MethodInsnNode call) {
String owner = call.owner;
if (owner.startsWith("android/util/Log")) {
context.report(ISSUE,
method,
call,
context.getLocation(call),
"You must use our `LogUtils`");
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以通过runnig命令运行我的自定义lint规则:
$gradle lint
Run Code Online (Sandbox Code Playgroud)
我会得到输出消息,就像我在控制台中预期的那样.
但我想调试我的XXXDetector源文件.我怎样才能做到这一点?如果我单击"debug"或"run"或"build",我的自定义lint规则将不会运行!所以我必须在控制台中运行它,它不支持调试.我怎么解决这个问题?
要调试自定义的皮棉检查,您需要运行带有-Dorg.gradle.debug=true参数的Gradle皮棉任务,例如:
./gradlew --no-daemon -Dorg.gradle.debug=true lintDebug
在连接调试器之前,Gradle将停止执行。
将调试器附加到本地进程:
并选择相应的Java进程:
附加调试器后,Gradle将继续执行,您将能够调试自定义的lint规则:
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |