Написание пользовательских lint.xml
Наш Android-проект зависит от некоторых внешних проектов, над которыми мы не имеем контроля. Поэтому я пытаюсь настроить собственный файл lint.xml, чтобы мы могли добавить правила игнорирования для них. В качестве стартового сценария я пытался удалить предупреждения из ActionBarSherlock (без обид Джейк)
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="FloatMath">
<ignore path="app/target/classes/com/actionbarsherlock/*" />
</issue>
<issue id="DefaultLocale">
<ignore path="app/target/classes/com/actionbarsherlock/*" />
</issue>
<issue id="ViewConstructor">
<ignore path="app/target/classes/com/actionbarsherlock/*" />
</issue>
</lint>
со следующей командой в
lint app --disable FloatMath,DefaultLocale,ViewConstructor --xml lint-result.xml
Однако подготовленный отчет все же содержал сообщения от АБС.
Обновить я изменил команду на
lint --disable FloatMath,DefaultLocale,ViewConstructor --xml lint-result.xml app
Не вносит никаких изменений, поскольку Jenkins по-прежнему создает один и тот же отчет, независимо от того, что игнорируется, однако при запуске в командной строке он игнорирует все проблемы, перечисленные после отключения. Я хотел бы, чтобы был простой способ сказать, эй, игнорировать / исключать вещи, как это делает Maven...
3 ответа
Еще раз отвечая на мой собственный вопрос... lint.xml теперь выглядит так и будет игнорировать любые отчеты ActionBarSherlock на ASB 4.2.0
<?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>
Команда выполнения оболочки, которую мы сейчас используем,
lint --config lint.xml --xml lint-results.xml .;
PS: Пожалуйста, имейте в виду, что это не удалит все отчеты об исключенном APKLIB, как в этом случае ABS, так как пока нет никакого способа исключить отчеты о неиспользованных ресурсах R.class. В процессе компиляции R.class связанной библиотеки и вашего проекта объединяются, и у Lint нет возможности узнать это. Он видит только один R.class с некоторыми ссылками, которые не используются, и сообщает о них.
Теперь это можно сделать так:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="all">
<ignore regexp="target/classes/com/actionbarsherlock/.*[.]class" />
</issue>
</lint>
Я заполнил файл 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>