静态代码扫描工具PMD定制xml的规则(一)操作篇
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="tk.jianmo.study" android:versionCode="2" android:versionName="2.0" > <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <service android:name=".killpoccessserve"/> /> <activity android:label="@string/app_name" android:name=".MainActivity" android:exported="false" > <intent-filter > <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> </application> </manifest>
所以我们要配置的xpath代码就是:
//activity[@*[name()=‘android:exported’ ]=‘false’] 并且选择1.0的语言版本
3.配置执行
打开PMD工程,打开pmd-xml子工程如果是你最新版,会是如下,如果是5.几版本相应的xml规则在ruleSets里.
打开errorprone.xml文件(其他都还是空的),发现里面就是rule的配置方法.(细节不懂的可以去https://pmd.github.io/),具体rule节点一般如下:
<rule name="规则名字" language="xml" since="5.0" message="规则信息" class="net.sourceforge.pmd.lang.rule.XPathRule" 必须配置,意味着该规则交给XPathRule类做分析 externalInfoUrl="规则解释链接,一般不需要,如果公司有对应安全库网站,可以配置相应url"> <description> 这里是规则的描述 </description> <priority>3</priority> <properties>
<property name="version" value="1.0" /> 添加这行,可以配置xpath对应语言版本 <property name="xpath"> <value> <![CDATA[ 规则代码例如: //activity[@*[name()='android:exported']='false'] ]]> </value> </property> </properties> <example> <![CDATA[ 规则场景代码 ]]> </example> </rule>
复制一份xml,到该resources文件下,然后按上文配置即可.
具体的程序启动就不细讲了~~官网都讲了.