2012-03-01 3 views
0

私は自分のビルドパスにAndroidライブラリプロジェクトを持つAndroidプロジェクトを開発中です。 両方のプロジェクトは、libsフォルダとビルドパスにAdWhirl SDKライブラリを持っています。SDKアップデート後の予期しないトップレベルの例外

さて、メインプロジェクトのAntビルドをR15次の例外で失敗するには、Android SDKツールを更新したのは:

[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 buildが動作しますが、Androidデバイス上でEclipseからアプリケーションを起動すると、ClassNotFoundExceptionsがスローされます。

実際には、私はantでビルドするかEclipseからデバッグする選択肢がありますが、両方のバリエーションが必要です。

答えて

2

、Androidのライブラリプロジェクトをしても最初からうまく設計されていない、しかし、これがために本当の問題になることができませんでしたこれは、SDKの各アップグレード時にこの動作と動作がまったく同じように維持されている限りです。

しかし、それはないですが、Androidの開発チームは、最近のいくつかのリリース(たぶんR14以降)の間に全体の事を刷新し、私たちに次に来るのリリースで究極のソリューションを約束し始めました。私のプロジェクトではantを使用しませんが、Mavenが各SDKのアップグレード中にライブラリの変更を管理するのと同様の問題がありました。 Android Devチームのように見えるのは、公式のADTプラグイン(これはblogを参照)から変更を管理するだけでなく、AntやMavenのような正式なサポートされているビルドツールはもちろんです。

あなたの状況に非常によく似たAndroid JIRAシステムに投稿されたスレッドがあり、回避策(antスクリプトの汚れた修正)が付属しています。comments 16 by chrisをチェックしてくださいあなたを助けます。

1

このjarファイルをlibsディレクトリに追加してみてください。

+0

これらのjarファイルはlibsディレクトリにあります – endian

+0

はい、ライブラリプロジェクトのbinフォルダに生成されたjarファイルをメインプロジェクトのlibsフォルダに追加すると、この問題がIntelliJで解決されます。 –

0

最新のadkにアップグレードした後、adb refreshを実行してantスクリプトを再構築するようメッセージが表示されました。最新バージョンのadkでは、ビルドプロセスの最適化が行われています。私は、これらの最適化の1つがビルドパスであると仮定しています。

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

含意AdWhirlLayout$AdWhirlInterfaceが2回追加されています。いずれかのプロジェクトから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

関連する問題