Android Lintを実行して、プロジェクトモジュールについてのみレポートし、使用しているライブラリプロジェクトを無視するにはどうすればよいですか?Lintをプロジェクトのモジュールに向けても、興味のないライブラリプロジェクトの問題のリストが表示されます。自分のコードの問題を修正することに集中したいと思います。
ライブラリプロジェクトへの参照に従うかどうかを指定するパラメータが表示されませんが、その方法は表示される可能性があります。
Android Lintを実行して、プロジェクトモジュールについてのみレポートし、使用しているライブラリプロジェクトを無視するにはどうすればよいですか?Lintをプロジェクトのモジュールに向けても、興味のないライブラリプロジェクトの問題のリストが表示されます。自分のコードの問題を修正することに集中したいと思います。
ライブラリプロジェクトへの参照に従うかどうかを指定するパラメータが表示されませんが、その方法は表示される可能性があります。
Android SDK Tools 21.1では、この問題/バグを解決するための新しい便利な機能が導入されました。
Android Lintオーバーフローメニューを見ると、探しているものを正確に実行する[ライブラリプロジェクトの依存関係をスキップする]オプションがあります。
Eclipseを使用している場合は、ライブラリプロジェクトのプロパティに移動し([プロジェクト]-> [プロパティ]を右クリック)、[AndroidLintの設定]で[すべて無視]をクリックして[OK]をクリックします。
私の解決策は、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ファイルは基本的に、ファイルの場所に「sherlock」が含まれていないかどうかをチェックしてから、新しい出力ファイルにコピーします。ニーズに合わせて変更できます。また、containsではなく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ビルドのコマンドラインにレポートを追加するだけです。
ant clean debug runlint
lint-results-all.xmlとlint-results.xml(フィルタリングされたコンテンツを含む)を取得する必要があります。これをJenkinsAndroidLintプラグインで使用します
このソリューションの醜い部分は、他のプロジェクトでまだlintを実行しているため、CPUサイクルを数回無駄にすることです。また、フィルタリングする名前はxsltファイルに含まれているため、フィルタリングする必要のある複数のサードパーティライブラリを使用すると、拡張性が低下する可能性があります。ただし、XSLTは十分に強力であるため、必要に応じてより優れたフィルターを簡単に作成できるはずです。
より一般的なアプローチにはlint.xmlを使用します。これは、Eclipseの外部でも機能します。使用済みのライブラリ(アクションバーシャーロックや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>
このアプローチは、JenkinsなどのCIソリューションでも機能します。