Подтвердить что ты не робот

Отчет Android Lint для моего проекта, за исключением проектов библиотеки?

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

enter image description here

Ответ 3

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

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

Предполагая, что вы используете ant для создания своих сборщиков Android, вы изменяете 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, я просто добавил его в командную строку в моей ant сборке на Jenkins.

ant clean debug runlint

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

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

Ответ 4

Используйте lint.xml для более общего подхода, который также работает вне Eclipse. Просто поместите используемые библиотеки (например, Action Bar Sherlock и 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, такими как Jenkins.