2012-03-01 22 views
0

我正在開發一個Android項目,該項目在其構建路徑中包含Android庫項目。 這兩個項目的libs文件夾和構建路徑中都有AdWhirl SDK庫。SDK更新後出現意外的頂級異常

既然現在有更新Android SDK工具來R15主體工程的Ant構建失敗,在以下情況除外:

[dx] UNEXPECTED TOP-LEVEL EXCEPTION: 
     [dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface; 
     [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 

現在我試圖從主項目中刪除的AdWhirl SDK lib和從庫導出項目。現在ant構建工作,但是當在任何android設備上從eclipse啓動應用程序時,都會拋出一些ClassNotFoundException異常。

其實我可以選擇使用ant或eclipse進行調試,但是我需要兩種變體。

回答

2

從我的角度來看,Android的圖書​​館項目是不是從一開始甚至精心設計的,但是,這不能成爲一個真正的問題消費者開發者,只要它保持這種狀態,並且在每次SDK升級期間行爲都完全相同。但是事實並非如此,Android開發團隊在最近發佈的幾個版本(可能從r14開始)中開始重新整理所有內容,並承諾我們將在即將發佈的版本中提供終極解決方案。這使我們目前處於一個非常不穩定的階段,我們不使用ant,而是在每次SDK升級期間使用Maven管理庫更改時出現類似的問題。看起來像Android開發團隊甚至難以純粹從他們的官方ADT插件管理這些更改(請查看此blog),更不用說像Ant或Maven這樣的非官方支持的構建工具。

我已經爲你做了一些搜索,在Android JIRA系統中發佈了一個與你的情況非常相似的線程,並附帶了一些解決方法(螞蟻腳本中的髒修復),請查看comments 16 by chris,看看這個幫助你。

1

嘗試將此jar添加到libs目錄。

+0

這些jar文件位於libs目錄中 – endian 2012-03-01 09:29:22

+0

是的,將在庫項目的bin文件夾中生成的jar文件添加到主項目的libs文件夾中,可以在IntelliJ中解決此問題。 – 2012-12-26 23:04:47

0

升級到最新的adk後,我收到一條消息,告訴我運行adb refresh來重建ant腳本。在最新版本的adk中,在構建過程中進行了優化。我假設這些優化之一是構建路徑。

[dx] java.lang.IllegalArgumentException: already added: Lcom/adwhirl/AdWhirlLayout$AdWhirlInterface; 

暗示AdWhirlLayout$AdWhirlInterface正在被添加兩次。嘗試從其中一個項目中刪除AdWhirl SDK。我會嘗試從Android項目中刪除它。

"Android Project" imports "Android Library Project" imports "AdWhirl SDK"

代替

"Android Project" imports "Adwhirl SDK" imports "Android Library Project" imports "AdWhirl SDK"

+0

請閱讀我的帖子..如果我從任何項目中刪除AdWhirl lib,使用eclipse構建將無法正常工作 – endian 2012-03-05 09:50:35

相關問題