2012-03-20 16 views
6

Mam projekt, który wykorzystuje dwie niezależne biblioteki Androida. Każda z nich zawiera Android pakiet wsparcia, tak aby nie budować mrówka na etapie „Dex”:Dwie biblioteki Androida duplikują ten sam jar - Błąd kompilacji 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 

co mam zrobić?

Mam zamiar przenieść jeden z tych plików jar z folderu libs w docelowym -post-compile. A następnie przenieść go z powrotem po zakończeniu kroku dex. Jakie są Twoje rekomendacje?

UPDATE: Próbowałem przenieść pakiet wsparcia z jednej z bibliotek w -post kompilacji cel, ale to nadal nie z innego powodu. Ten słoik jest już zawarty w ścieżce przetwarzanej przez zadanie dex. Zadanie dex nie może otworzyć usuniętego słoika.

+0

można mieć jedną bibliotekę zależy od drugiego, i dodać pakiet wsparcia tylko tam – njzk2

+0

Ja też o tym myślałem, ale chcą z nich korzystać niezależnie –

+0

to wygląda zostanie naprawiony w r17 narzędzi Android. http://code.google.com/p/android/issues/detail?id=21169 –

Odpowiedz

1

Należy uniknąć tej samej biblioteki w obu. Czy nie można wykluczyć jednego pakietu wsparcia specjalnie przy użyciu symboli wieloznacznych z jednej z bibliotek podczas kompilacji projektu? Filtrując go z PROGUARD, na przykład:

-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) 
Powiązane problemy