una - ¿Informe de Android Lint solo para mi proyecto, excluyendo proyectos de biblioteca?
proyectos para bibliotecas publicas (4)
¿Cómo ejecuto Android Lint para que solo informe sobre el módulo de mi proyecto e ignore los proyectos de biblioteca que estoy usando? Incluso cuando apunto Lint al módulo de mi proyecto, arroja listas de problemas en los proyectos de la biblioteca que no me interesan; quiero concentrarme en solucionar problemas en mi propio código.
No puedo ver un parámetro para especificar si sigue las referencias a los proyectos de la biblioteca o no, pero quizás pueda ver cómo hacerlo.
El Android SDK Tools 21.1 introdujo una característica nueva y conveniente para resolver este problema / error.
Eche un vistazo al menú de desbordamiento de pelusa de Android y encontrará la opción Omitir dependencias del proyecto de la biblioteca que hará exactamente lo que está buscando.
Mi solución fue modificar la salida de pelusa para filtrar los errores y advertencias de otros proyectos.
Hice esto con una tarea ant personalizada y un archivo xslt para filtrar.
Suponiendo que está utilizando ant para hacer sus compilaciones de Android, modifica las 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>
Luego agregué un archivo XSLT que elimina los problemas de los otros proyectos: lint-cleanup.xslt.
El archivo XSLT básicamente verifica si la ubicación del archivo NO contiene "sherlock" y luego se copia en un nuevo archivo de salida. Puede modificar para adaptarse a sus necesidades. También puede funcionar como start-with lugar de contiene.
<?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>
Para ejecutar el informe de pelusas simplemente lo agregué a la línea de comandos en mi compilación de hormigas en Jenkins.
ant clean debug runlint
Debería obtener lint-results-all.xml y un lint-results.xml (con el contenido filtrado). Lo uso con el plugin Jenkins Android Lint
La parte más fea de esta solución es que aún corre pelusa en el otro proyecto, por lo que pierdes unos cuantos ciclos de CPU. Además, el nombre que está filtrando está en el archivo xslt, por lo que puede que no se escale bien si usa varias bibliotecas de terceros que necesita filtrar. Sin embargo, XSLT es lo suficientemente potente como para poder crear fácilmente un mejor filtro según sea necesario.
Si está utilizando Eclipse, vaya a las propiedades del proyecto de la biblioteca (haga clic con el botón derecho en proyecto -> Propiedades) y en "Preferencias de Android Lint" haga clic en "Ignorar todo" y luego en Aceptar.
Utilice lint.xml para un enfoque más general, que también funciona fuera de Eclipse. Simplemente ponga las bibliotecas usadas (por ejemplo, Action Bar Sherlock y Facebook) para ignorar:
<?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>
Este enfoque también funciona con soluciones de CI como Jenkins.