2012-03-01 16 views
10

Necesito crear el jar jar de utils mínimo para usar en Android. Estoy usando algunos métodos de las bibliotecas de Apache commons (como IOUtils, StringUtils). Sin embargo, cada uso me hace importar toda la biblioteca (commons-lang, commons-io etc.) que es absolutamente aceptable bajo Tomcat (war son del tamaño de mamoot de todos modos), pero absolutamente inaceptable para el proyecto de Android.Genere un jar minimizado con solo las clases usadas

Por lo tanto, mi objetivo es empacar todas las clases usadas de las dependencias en un solo contenedor, pero solo las que sean necesarias. Recuerdo que una vez en contacto con el plugin maven que hizo esa tarea, desafortunadamente no recuerdo su nombre ni lo encuentro a través de Google.

Entonces, ¿sabe usted el plugin maven que hará tal minimización de dependencias, o cualquier herramienta independiente que haga lo mismo?

Respuesta

0

Disculpe, quizás no entendí claramente la pregunta. La herramienta Obfuscator (es decir, ProGuard) podría hacer eso, ¿no es así? Encapsula varios JAR en uno y elimina las clases no utilizadas. Si no necesita ofuscación/optimización (para evitar efectos secundarios no deseados), puede desactivarlos, dejando activada la fase de "contracción".

+0

He descubierto que ProGuard ya está integrado en Android SKD, así que definitivamente veré si cumple con mis requisitos. –

+0

Como sé, estos brokers de empaquetado firmaron JAR de la biblioteca. Puede ser una seria desventaja. – Mersenne

-3

Supongo que si utiliza Eclipse para JAR el proyecto le da algunas opciones para hacerlo mientras JARing :) Tal vez sea útil.

También puede recopilar sus clases de biblioteca usadas en una biblioteca personalizada e incluir esta biblioteca creada por el usuario en el proyecto.

+0

Esto es para lo que necesito una herramienta. Sé que podría hacerlo manualmente. –

0

En general, no es posible seleccionar automáticamente todas las clases que utiliza una aplicación. Solo piense en lo que podemos hacer con Class.forName(String name) o si usamos un contenedor de inyección de dependencia y declaramos tipos en archivos de configuración externos.

+0

Lo sé, pero esto es solo cuando usa el reflejo. AFAIR esta herramienta estaba funcionando cuando no había ningún reflejo presente, pero no puedo decir con certeza si realmente lo he visto o si fue solo un sueño;) –

+0

No solo cuando usas la reflexión: puedes cargar una clase desde una URL y eso la clase podría depender de las clases en tu classpath. También se estrellaría. –

+0

sigue siendo muy útil incluso con algunos códigos de carga de una manera que el compilador no ve. Quienes deseen crear un jar mínimo pueden incluir en la lista blanca las clases que no se encontrarán automáticamente. –

5

El complemento maven que no puede recordar es probablemente Apache Maven Shade Plugin, existe la opción minimizeJar. Como notó Andreas_D, esto no incluirá clases cargadas con Class.forName, por lo que necesitará implicity say in configuration, que las necesita. Así es como hice maven para incluir el controlador jdbc en mi único contenedor:

<filter> 
    <artifact>net.sourceforge.jtds:jtds</artifact> 
    <includes> 
     <include>**</include> 
    </includes> 
</filter> 
Cuestiones relacionadas