2012-03-20 52 views
6

我有一個項目使用兩個獨立的Android庫。他們每個人都包含Android支持包,以至於在「dex」步驟上螞蟻構建失敗:兩個Android庫複製相同的jar - 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 

我該怎麼辦?

我打算將這些jar文件中的一個移出目標文件夾-post-compile。然後在dex步驟完成後將其移回。 你有什麼建議?

UPDATE: 我試圖移動支持包出來的一個庫中-post編譯目標,但它仍然失敗,因爲另一個原因。此jar已包含在由dex任務處理的路徑中。而dex任務無法打開刪除的jar。

+0

你可以有一個庫依賴於其他,並添加支持包只有在那裏 – njzk2 2012-03-20 17:29:02

+0

我也想過這個問題,但要使用它們獨立 – 2012-03-20 17:42:21

+0

看起來它將在Android工具的r17中得到修復。 http://code.google.com/p/android/issues/detail?id=21169 – 2012-03-20 17:56:06

回答

1

你應該避免在兩個相同的庫。您不能在項目編譯時從一個庫中專門使用通配符排除一個支持包嗎?通過使用ProGuard過濾出來,例如:

-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)