2012-03-20 7 views
6

Tengo un proyecto que usa dos bibliotecas Android independientes. Cada uno de ellos contiene el paquete de soporte de Android, por lo que la compilación ant falla en el paso 'dex':Dos bibliotecas de Android duplican el mismo jar: error de compilación Ant

[dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
    [dx] java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat; 
    [dx]  at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
    [dx]  at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
    [dx]  at com.android.dx.command.dexer.Main.processClass(Main.java:486) 
    [dx]  at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455) 
    [dx]  at com.android.dx.command.dexer.Main.access$400(Main.java:67) 
    [dx]  at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394) 
    [dx]  at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) 
    [dx]  at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) 
    [dx]  at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) 
    [dx]  at com.android.dx.command.dexer.Main.processOne(Main.java:418) 
    [dx]  at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329) 
    [dx]  at com.android.dx.command.dexer.Main.run(Main.java:206) 
    [dx]  at com.android.dx.command.dexer.Main.main(Main.java:174) 
    [dx]  at com.android.dx.command.Main.main(Main.java:95) 
    [dx] 1 error; aborting 

¿Qué debo hacer?

Voy a mover uno de estos archivos jar de la carpeta libs en -post-compile target. Y luego vuelva a moverlo después de que el paso dex haya terminado. ¿Cuáles son sus recomendaciones?

ACTUALIZACIÓN: He intentado mover el paquete de apoyo de una de las bibliotecas en -post-compilar objetivo, pero no lo consigo, debido a otra razón. Este jar ya está incluido en la ruta que procesa la tarea dex. Y la tarea dex no puede abrir el jar eliminado.

+0

usted podría tener una biblioteca depende de la otra, y añadir el paquete de apoyo sólo allí – njzk2

+0

también pensé en ello, pero desea utilizar de forma independiente –

+0

parece que se solucionará en r17 de las herramientas de Android. http://code.google.com/p/android/issues/detail?id=21169 –

Respuesta

1

debe evitar tener la misma biblioteca en ambos. ¿No puede excluir un paquete de soporte específicamente utilizando comodines de una de las bibliotecas en el momento de la compilación de su proyecto? Filtrándola a cabo con Proguard, por ejemplo:

-libraryjars ${android.libraryjars}(!org/xmlpull/v1/XmlPullParser.class,!org/xmlpull/v1/XmlPullParserException.class,!META-INF/MANIFEST.MF,!META-INF/NOTICE.txt,!META-INF/LICENSE.txt) 
Cuestiones relacionadas