Android 编写自定义lint.xml

Android 编写自定义lint.xml,android,reporting,lint,Android,Reporting,Lint,我们的Android项目依赖于一些我们无法控制的外部项目。因此,我试图设置自定义lint.xml文件,以便为它们添加忽略规则。作为开始场景,我试图从ActionBarSherlock中删除警告(无意冒犯Jake) 然而,生成的报告仍然包含来自ABS的消息 更新 我把命令改为 lint --disable FloatMath,DefaultLocale,ViewConstructor --xml lint-result.xml app 不会对Jenkins进行任何更改,但不管ignore中有什么

我们的Android项目依赖于一些我们无法控制的外部项目。因此,我试图设置自定义lint.xml文件,以便为它们添加忽略规则。作为开始场景,我试图从ActionBarSherlock中删除警告(无意冒犯Jake)

然而,生成的报告仍然包含来自ABS的消息

更新 我把命令改为

lint --disable FloatMath,DefaultLocale,ViewConstructor --xml lint-result.xml app

不会对Jenkins进行任何更改,但不管ignore中有什么内容,Jenkins仍会生成相同的报告,但如果在命令行中运行,它会忽略禁用后列出的所有问题。我希望有一个简单的方式来说,嘿,像Maven那样忽略/排除事情…

再次回答我自己的问题。。。 xml现在看起来是这样的,它将忽略ASB 4.2.0上的任何ActionBarSherlock报告

<?xml version="1.0" encoding="UTF-8"?>
<lint>
  <issue id="NewApi">
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeWrapper.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarWrapper.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarWrapper$TabWrapper.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/view/ActionProviderWrapper.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$HasPermanentMenuKey.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsAdapterView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsProgressBar.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarView$HomeView.class" />
    <ignore path="target/classes/com/actionbarsherlock/widget/SearchView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/AbsActionBarView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarContextView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsLinearLayout.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.class" />
    <ignore path="target/classes/com/actionbarsherlock/widget/ActivityChooserView$SetActivated.class" />
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockActivity.class" />
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockExpandableListActivity.class" />
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockListActivity.class" />
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockPreferenceActivity.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeCallbackWrapper.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarImpl$1.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarImpl.class" />
  </issue>

  <issue id="FloatMath">
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.class" />
  </issue>

  <issue id="DefaultLocale">
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class" />
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class" />
  </issue>

  <issue id="ViewConstructor">
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CollapsibleActionViewWrapper.class" />
  </issue>

  <issue id="WrongCall">
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsAdapterView.class" />
  </issue>
</lint>

PS:请注意,这不会像本例中的ABS一样删除所有已排除APKLIB的报告,因为到目前为止,无法排除报告到R.class的未使用资源。在编译过程中,链接库的R.class和您的项目确实合并了,Lint无法知道这一点。它只看到单个R.class,其中包含一些未使用的引用并报告它们。

我已经完成了lint.xml文件,以排除更多actionbarsherlock错误。但是,最好有一个排除包机制

<?xml version="1.0" encoding="UTF-8"?>
<lint>
  <issue id="NewApi">
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarWrapper$TabWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/ActionProviderWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$HasPermanentMenuKey.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsAdapterView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsProgressBar.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarView$HomeView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/widget/SearchView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/AbsActionBarView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarContextView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarImpl$1.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarImpl.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeCallbackWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/widget/ActivityChooserView$SetActivated.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsLinearLayout.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockExpandableListActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockListActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockPreferenceActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.class"/>
    <ignore path="target/classes/com/viewpagerindicator/IcsLinearLayout.class"/>
</issue>

<issue id="FloatMath">
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.class"/>
</issue>

<issue id="DefaultLocale">
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class"/>
</issue>

<issue id="ViewConstructor">
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CollapsibleActionViewWrapper.class"/>
</issue>
</lint>

现在可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="all">
        <ignore regexp="target/classes/com/actionbarsherlock/.*[.]class" />
    </issue>
</lint>


Snicolas我同意,谷歌需要进一步完善它,因为列出project“add-on”库的所有类简直是疯了。其次,这并不能解决R.class报告由图书馆带来的未使用资源的问题,正如我所说的,这只负责类。如果您查看lint result report,您会发现有大量未使用的资源链接到R classI,我将您答案的
lint.xml
放在我的项目根目录中。不过没有变化。您是使用
mvn-android:lint
运行lint,还是将
maven编译器插件
配置为在构建过程中执行lint?请添加您的配置。我正在Jenkins上以'lint--config lint.xml--xml lint result.xml'或'lint--config lint.xml'的形式从shell调用lint,如果您在本地运行它的话。通过这种方式,您可以直接运行android lint工具。我并没有尝试使用android maven插件,但我认为必须在配置中添加排除lint文件
lint --config lint.xml --xml lint-results.xml .;
<?xml version="1.0" encoding="UTF-8"?>
<lint>
  <issue id="NewApi">
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarWrapper$TabWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/ActionProviderWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/MenuItemWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/ActionMenuPresenter$HasPermanentMenuKey.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsAdapterView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsProgressBar.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarView$HomeView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/widget/SearchView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/AbsActionBarView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarContextView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarImpl$1.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/app/ActionBarImpl.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/ActionBarSherlockNative$ActionModeCallbackWrapper.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ActionBarView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/widget/ActivityChooserView$SetActivated.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/view/menu/BaseMenuPresenter.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsAbsSpinner.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsLinearLayout.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/IcsListPopupWindow.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineHorizontalScrollView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineLinearLayout.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/view/NineViewGroup.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockExpandableListActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockListActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/app/SherlockPreferenceActivity.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/widget/NineFrameLayout.class"/>
    <ignore path="target/classes/com/viewpagerindicator/IcsLinearLayout.class"/>
</issue>

<issue id="FloatMath">
    <ignore path="target/classes/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.class"/>
</issue>

<issue id="DefaultLocale">
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingTextView.class"/>
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CapitalizingButton.class"/>
</issue>

<issue id="ViewConstructor">
    <ignore path="target/classes/com/actionbarsherlock/internal/widget/CollapsibleActionViewWrapper.class"/>
</issue>
</lint>
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <issue id="all">
        <ignore regexp="target/classes/com/actionbarsherlock/.*[.]class" />
    </issue>
</lint>