0

ビルドパスにAndroidライブラリプロジェクトがあるAndroidプロジェクトに取り組んでいます。どちらのプロジェクトでも、libsフォルダーとビルドパスにAdWhirlSDKライブラリがあります。

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からアプリケーションを起動すると、いくつかのClassNotFoundExceptionsがスローされます。

実際、私はantでビルドするか、Eclipseでデバッグするかを選択できますが、両方のバリアントが必要です。

4

3 に答える 3

2

私の見解では、Android Library Project は最初からうまく設計されていませんが、SDK のアップグレードのたびに動作がまったく同じである限り、コンシューマ デベロッパーにとってこれは大きな問題にはなりません。

しかし、そうではありません。Android 開発チームは、最近のいくつかのリリース (おそらく r14 以降) で全体の改良を開始し、次のリリースで究極のソリューションを約束します。これにより、現在、継続的な開発が非常に不安定な段階に置かれています。私は自分のプロジェクトで ant を使用していませんが、SDK のアップグレードごとにライブラリの変更を管理する Maven を使用すると、同様の問題が発生しました。Android 開発チームは、Ant や Maven などの非公式にサポートされているビルド ツールは言うまでもなく、公式の ADT プラグイン (このブログを参照) から純粋に変更を管理することさえ困難だったようです。

私はあなたのためにいくつかの検索を行いました.あなたの状況に非常に似ているAndroid JIRAシステムに投稿されたスレッドがあり、いくつかの回避策(antスクリプトの汚い修正)が付属しています,コメント16 by chrisをチェックしてください,これが役立つかどうかを確認してくださいあなたがアウト。

于 2012-03-03T22:11:26.127 に答える
1

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

于 2012-03-01T09:27:44.803 に答える
0

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

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

AdWhirlLayout$AdWhirlInterface2 回追加されていることを意味します。いずれかのプロジェクトから AdWhirl SDK を削除してみてください。Android プロジェクトから削除してみます。

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

それ以外の

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

于 2012-03-03T20:32:48.147 に答える