0

私は Eclipse と Java に比較的慣れていないため、用語の間違いはご容赦ください。

外部 API (Amazon Web Service API) を実装する Android アプリを作成しています。ダウンロードした API ファイルには、.class ファイルを含むディレクトリと .java ファイルを含むディレクトリが含まれます。

これらを依存関係として追加する際に、次のことを行いました。

  1. Eclipse->プロジェクト プロパティ->java ビルド パス->ソース->リンク ソース->.java ファイルを含むディレクトリを選択します。

  2. Eclipse->プロジェクト プロパティ->java ビルド パス->ライブラリ->外部クラス フォルダーの追加->.class ファイルを含むディレクトリを選択します。

この構成でコンパイルすると、次のエラーが発生します。

    java.lang.IllegalArgumentException: already added: Lcom/ECS/client/jax/VariationSummary;
    Conversion to Dalvik format failed with error 1

このエラーは、クラス ファイルごとに 1 回繰り返されます。

これをトラブルシューティングするために、外部クラス フォルダーへの参照を削除すると、プログラムがコンパイルされて実行されます。ただし、API のメソッドの 1 つを使用するコード セグメントに到達すると、次のエラーでクラッシュします。

01-15 15:29:20.756: E/AndroidRuntime(1038): java.lang.NoClassDefFoundError: com.ECS.client.jax.AWSECommerceService

編集

完全なスタック トレース:

01-15 17:12:28.256: W/dalvikvm(1227): Unable to resolve superclass of Lcom/ECS/client/jax/AWSECommerceService; (365)
01-15 17:12:28.296: W/dalvikvm(1227): Link of class 'Lcom/ECS/client/jax/AWSECommerceService;' failed
01-15 17:12:28.296: E/dalvikvm(1227): Could not find class 'com.ECS.client.jax.AWSECommerceService', referenced from method com.giftme.Amazon.searchRequest
01-15 17:12:28.296: W/dalvikvm(1227): VFY: unable to resolve new-instance 66 (Lcom/ECS/client/jax/AWSECommerceService;) in Lcom/giftme/Amazon;
01-15 17:12:28.306: D/dalvikvm(1227): VFY: replacing opcode 0x22 at 0x0000
01-15 17:12:28.306: D/dalvikvm(1227): VFY: dead code 0x0002-0033 in Lcom/giftme/Amazon;.searchRequest (Ljava/lang/String;)Z
01-15 17:12:28.306: W/dalvikvm(1227): threadid=10: thread exiting with uncaught exception (group=0x40015560)

01-15 17:12:28.306: E/AndroidRuntime(1227): FATAL EXCEPTION: Thread-13
01-15 17:12:28.306: E/AndroidRuntime(1227): java.lang.NoClassDefFoundError: com.ECS.client.jax.AWSECommerceService
01-15 17:12:28.306: E/AndroidRuntime(1227):     at com.giftme.Amazon.searchRequest(Amazon.java:21)
01-15 17:12:28.306: E/AndroidRuntime(1227):     at com.giftme.Friend$InterestsRequestListener$4.parseDataAndSearch(Friend.java:359)
01-15 17:12:28.306: E/AndroidRuntime(1227):     at com.giftme.Friend$InterestsRequestListener$4.run(Friend.java:329)
01-15 17:12:28.306: E/AndroidRuntime(1227):     at java.lang.Thread.run(Thread.java:1019)

そして、これが参照している21行目です:

AWSECommerceService service = new AWSECommerceService();
4

1 に答える 1

1

まず最初に、パッケージ ファイルのルート フォルダー (例: /classes/ (クラス フォルダーに com/amazon/some/or/the/other など) が含まれている場合) をリンクする必要があります。クラス ファイルにはすべての情報が含まれているため、ソースファイルを使用する必要はありません。

ただし、必要に応じてソースを確認できるように、Java ファイルを含むパッケージのルートを (再度) 追加することができます。これのもう 1 つの利点は、クラス ファイルに存在しないメソッド引数の名前を確認できることです。これを行うには、クラス フォルダーのアイテムを展開した後、[ビルド パス] タブ ライブラリのリンク ソースをクリックします。

于 2012-01-15T23:56:21.153 に答える