ResourceXmlDetector是lint帮我们定义好的,用于检查资源的一个Detector,其实它没做什么,只是帮我们继承了Detector和实现了Detector.XmlScanner而已。ResourceXmlDetector可以检查包括像xml,图像等资源。
以下例子以限定检查values目录中的xml的属性名是否以”dk_”开头。
1 | public static final Issue ISSUE = Issue.create("CheckXmlResource", |
先创建一个Issue,这个与之前的是一致的,只不要Scope需要变成RESOURCE_FILE(_SCOPE)。
由于我们只需要检查xml,可以通过appliesTo方法过滤
1 | public boolean appliesTo(@NonNull Context context, @NonNull File file) { |
每一个文件都会到这里进行过滤,只有符合的文件才会进行检查。
另外,我们也可以选择检查哪些目录,android中的资源文件夹有layout,drawable,values等,我们只需要检查values就可以了,可以使用appliesTo的另一个方法
1 | //只接受values文件夹 |
通过以上两步,我们就可以将检查的范围限定在values下的xml文件。
我们可以通过getApplicableElements来限定需要检查的xml的标签。
1 | //只检查attr的标签 |
如此,lint就只会检查
针对attr标签,我们也可以设定需要检查的属性:
1 | //只检查name的属性 |
通过以上四个方法,我们就将检查的内容限定好了,接下来就是遍历节点
1 | public void visitElement(XmlContext context, Element element) { |
检查方法很简单,visitElement的第二个参数Element是指一个标签,通过getAttributeNode可以获取到这个元素的一个属性,从而进行判断,比较简单。
[link]