2012-03-22 9 views
23

Как запустить Android Lint, так что он только сообщает о моем модуле проекта и игнорирует любые проекты библиотеки, которые я использую? Даже когда я нацеливаю Линта на модуль моего проекта, он выводит список проблем в библиотечных проектах, которые меня не интересуют, - я хочу сосредоточить усилия на устранении проблем в своем собственном коде.Отчет Android Lint для моего проекта, кроме проектов библиотеки?

Я не вижу параметр, указывающий, следует ли ему ссылаться на проекты библиотеки или нет, но, возможно, вы можете увидеть, как это сделать.

ответ

6

Если вы используете Eclipse, перейдите в свойства проекта библиотеки (щелкните правой кнопкой мыши по проекту -> Свойства), а в разделе «Настройки Android Lint» нажмите «Игнорировать все» и нажмите «ОК».

+2

Я запускаю его из командной строки. –

+1

Тем не менее это рабочее решение.Настройки, измененные в Eclipse, хранятся в файле lint.xml внутри проекта, который впоследствии также оценивается при запуске lint из командной строки. – Bananeweizen

+0

Интересно знать, но не помогает мне, поскольку я не использую Eclipse, я использую IntelliJ. –

2

Моим решением было изменить выход lint для фильтрации ошибок и предупреждений других проектов.

Я сделал это с помощью специальной задачи ant и файла xslt для фильтрации.

Предполагая, что вы используете муравей, чтобы сделать ваш андроид строит вы изменяете custom_rules.xml:

<property name="lint.script" value="${sdk.dir}/tools/lint"/> 
<property name="lint.report" location="${basedir}/lint-results-all.xml"/> 
<property name="lint.project.loc" location="${basedir}"/> 

<target name="lint"> 
<!-- lint --xml lint-results-all.xml --> 
    <exec executable="${lint.script}"> 
    <arg value="--xml"/> 
    <arg value="${lint.report}"/> 
    <arg value="${lint.project.loc}"/> 
    </exec> 
</target> 

<target name="runlint" depends="lint"> 
    <xslt in="lint-results-all.xml" out="lint-results.xml" style="lint-cleanup.xslt" /> 
</target> 

Затем я добавил файл XSLT, который вырежет вопросы для других проектов: Lint-cleanup.xslt ,

Файл XSLT basicallly проверяет, не содержит ли местоположение файла «sherlock», а затем копирует в новый выходной файл. Вы можете изменить в соответствии с вашими потребностями. Он также может работать как start-with, а не содержит.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="issue"> 
      <xsl:variable name="location_to_filter" select="'sherlock'" /> 
      <xsl:if test="not(contains(location/@file, $location_to_filter))"> 
        <xsl:copy-of select="."/> 
      </xsl:if> 
    </xsl:template> 

<xsl:template match="@*|node()"> 
    <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

Чтобы запустить отчет о lint, я просто добавил его в командную строку в своем муравейнике на Jenkins.

ant clean debug runlint 

Вы должны получить Lint-результаты-all.xml и пуха-results.xml (с отфильтрованным содержанием). Я использую это с Jenkins Android Lint plugin

Уродливая часть об этом решении заключается в том, что он по-прежнему работает с другим проектом, поэтому вы тратите несколько циклов процессора. Кроме того, имя, которое вы фильтруете, находится в файле xslt, поэтому оно может плохо масштабироваться, если вы используете несколько сторонних библиотек, которые необходимо фильтровать. Однако XSLT достаточно мощный, он должен иметь возможность легко создавать лучший фильтр по мере необходимости.

+0

Как вы определили lint.script & lint.project? –

+0

@ sebastian-roth lint.script и lint.report являются только файлами ant. Я обновил ответ, чтобы показать их. – sww314

+0

можете ли вы добавить некоторую информацию о том, как добавить его в файл pom и в сборку maven? – cV2

17

Android SDK Tools 21.1 представляет новую, удобную функцию для решения этой проблемы/ошибки.

Посмотрите на Android Lint меню переполнения и вы найдете опцию Пропустить Library Project Зависимости которые будут делать то, что вы ищете.

enter image description here

+0

Что относительно общих предупреждений, которые у меня есть для Java? Можно ли игнорировать все предупреждения и ошибки в библиотечных проектах? –

+2

Это устраняет проблему. Его следует считать правильным решением. Принятый ответ создает проблему, о которой сообщает @frank – Imanol

+2

. Это работает для Eclipse, но как мне получить аналогичное поведение в командной строке? Я запускаю lint из командной строки как часть процесса сборки (он разбивает сборку, если не используются неиспользуемые ресурсы). Прямо сейчас, он будет ломаться, если вы используете какой-либо проект библиотеки. – tdevaux

1

Использование lint.xml для более общего подхода, который также работает за пределами Eclipse. Просто поместите используемые библиотеки (например, Action Bar Шерлок и Facebook), чтобы игнорировать:

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

Этот подход также работает с CI решений, как Дженкинс.

 Смежные вопросы

  • Нет связанных вопросов^_^