2011-12-21 18 views
4

私はgoogle-api-java-clientを使用するEclipseで簡単なAndroidプロジェクトを構築しています。私はそれを稼働させるためにthis tutorialに従おうとしています。 EclipseのAndroidプロジェクトにJARを追加する方法について、私はSOから検索しました。ほとんどの人はAndroidプロジェクト内のlib/フォルダにJARを追加してから、それらのJARをプロジェクトのビルドパスに追加することをお勧めします。私はこれら2つのことをやった。プロジェクトはうまくコンパイルされます(いずれの場合でも、Eclipseはエラーについて不平を言うことはありません)。しかし、エミュレータでAndroidアプリを実行すると、google-api-java-client JARでクラスをインスタンス化しようとすると、ClassDefNotFoundErrorになります。たとえば、eclipseでアンドロイドプロジェクトに外部jarを追加する

new com.google.api.client.http.apache.ApacheHttpTransport(); 

Raises ClassDefNotFoundErrorです。ここで

は、エラーの原因となるコードです:ここでは

package com.mycom.android; 

import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 

public class SearchRunner implements OnClickListener { 

    private static final String API_KEY = "AIzaSyA1Mg3xWXfoov4HdPUzYY2NwTxuvCev1-E"; 
    private static final String PLACES_SEARCH_URL = ""; 

    @Override 
    public void onClick(View v) { 
     EditText editText = (EditText) v; 
     String searchText = editText.getText().toString(); 
     runSearch(searchText); 
    } 

    protected void runSearch(String searchText) { 
     new com.google.api.client.http.apache.ApacheHttpTransport(); 
    } 

} 

は、Eclipse LogCatから、より完全な出力です:多分

12-21 15:42:11.402: E/dalvikvm(3412): Could not find class 'com.google.api.client.http.apache.ApacheHttpTransport', referenced from method com.mycom.android.SearchRunner.runSearch 
12-21 15:42:11.402: W/dalvikvm(3412): VFY: unable to resolve new-instance 70 (Lcom/google/api/client/http/apache/ApacheHttpTransport;) in Lcom/mycom/android/SearchRunner; 
12-21 15:42:11.402: D/dalvikvm(3412): VFY: replacing opcode 0x22 at 0x0000 
12-21 15:42:11.402: D/dalvikvm(3412): DexOpt: unable to opt direct call 0x00ca at 0x02 in Lcom/mycom/android/SearchRunner;.runSearch 
12-21 15:42:11.682: I/MapActivity(3412): Handling network change notification:CONNECTED 
12-21 15:42:11.682: E/MapActivity(3412): Couldn't get connection factory client 
12-21 15:42:11.791: D/gralloc_goldfish(3412): Emulator without GPU emulation detected. 
12-21 15:42:12.532: D/dalvikvm(3412): GC_CONCURRENT freed 102K, 3% free 10520K/10823K, paused 5ms+7ms 
12-21 15:42:18.422: D/AndroidRuntime(3412): Shutting down VM 
12-21 15:42:18.422: W/dalvikvm(3412): threadid=1: thread exiting with uncaught exception (group=0x409951f8) 
12-21 15:42:18.482: E/AndroidRuntime(3412): FATAL EXCEPTION: main 
12-21 15:42:18.482: E/AndroidRuntime(3412): java.lang.NoClassDefFoundError: com.google.api.client.http.apache.ApacheHttpTransport 
12-21 15:42:18.482: E/AndroidRuntime(3412):  at com.mycom.android.SearchRunner.runSearch(SearchRunner.java:20) 

答えて

5

。あなたのための輸入を整理すべきである私は、次のことで、問題を解決しthese instructionsステップバイステップ。ときI最初にプロジェクトの設定始めた:私はlib/google-api-client...を右クリックし、ビルド・パスを選択し

  • 私のプロジェクトのlib/フォルダにgoogle-api-java-clientプロジェクトからJARファイルをインポートし

    1. >のパスに

    を構築するために追加します。この時点で、Eclipseでは、私のプロジェクトの「参照されたライブラリ」セクションの下にライブラリの束が表示されます:

    jsr305-1.3.9.jar 
    gson-1.7.1.jar 
    guava-r09.jar 
    junit-4.8.2.jar 
    httpclient-4.0.3.jar 
    httpcore-4.0.1.jar 
    commons-logging-1.1.1.jar 
    commons-codec-1.3.jar 
    jackson-core-asl-1.9.1.jar 
    xpp3-1.1.4c.jar 
    protobuf-java-2.2.0.jar 
    google-http-client-1.6.0-beta.jar 
    google-oauth-client-1.6.0-beta.jar 
    google-api-client-1.6.0-beta.jar 
    

    しかし、Project> Properties> Java Build Path> Librariesに行ったところ、google-api-client...が表示されていました。プロジェクトを実行しようとすると、元の投稿に記載されているApacheHttpTransportNoClassDefFounErrorが得られました。これは、クラスがgoogle-http-clientに定義されているためです!手動でgoogle-http-clientをビルドパスに追加すると、問題は解決されます。

    レッスンは学んだ:JARはEclipseプロジェクトの「参照されるライブラリ」の下にリストされているからといって、それらのJARをプロジェクトのビルド・パスに含まれているわけではありません。

  • +0

    上記のリンクは非常に有益であることが判明しました。ありがとう! – nathansizemore

    0

    輸入? ctrl + shift + oは何ですか?

    ない場合、私はあなたがlibフォルダ内のjar(複数可)を置き、このエラー

    +0

    Ctrl + Shift + oは、不足しているインポートステートメントを追加します。明確にするために、コードはちょうど良い(不足しているインポートステートメントはありません)だけコンパイルします。 – maxenglander

    +0

    プロジェクトをクリーンアップするとエラーが残りますか? – Travis

    +0

    トラビス - そうです。 – maxenglander

    0

    はいて、良いクラスをインスタンス化し、ビルド・パスの(プロパティセクションにプロジェクトを追加する必要がありますかわからないあなたAndroidライブラリの "libraries"セクションに表示されるjarファイルが使用中であることを確認してください。

    参照用には、some.package.comというimportを使用してください。 +シフト+ oは

    関連する問題