简体   繁体   中英

Add external jar to android project in eclipse

I am building a simple Android project in eclipse that uses the google-api-java-client . I'm trying to follow this tutorial to get it up and running. I've searched through SO for answers on how to add JARs to an Android project in Eclipse. Most of them recommend adding the JARs into the lib/ folder inside the Android project, and then adding those JARs to the project's build path. I've done these two things. The project compiles fine (in any case, Eclipse doesn't complain about any errors). But when I run the Android app in my emulator, I get ClassDefNotFoundError whenever I try to instantiate any class in the google-api-java-client JAR. For example

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

Raises ClassDefNotFoundError .

Here is the code that causes the error:

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();
    }

}

Here is a more complete output from 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)

I solved the issue by following these instructions step-by-step. When I initially began setting up the project:

  1. I imported the JAR files from the google-api-java-client project into my project's lib/ folder
  2. I right-clicked lib/google-api-client... and selected Build Path > Add To Build Path

At this point, in Eclipse, a bunch of libraries appear under my project's "Referenced Libraries" section:

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

However, when I went to Project > Properties > Java Build Path > Libraries, I saw that only google-api-client... was listed. When I tried to run the project, I got the NoClassDefFounError for ApacheHttpTransport , as mentioned in the original post. This is because that class is defined in google-http-client !. By manually adding google-http-client to the build path, the problem is solved.

Lesson learned: just because a JAR is listed under an Eclipse project's "Referenced Libraries" does not mean those JARs are included in the project's build path.

maybe imports ? ctrl+shift+o does anything?

If not, I'm not sure you must instantiate the good class, with this error

Yes place the jar(s) in the lib folder and add the project to the build path (properties section of your project. Eclipse will clean and build after. You should see the jar file in use as it will appear in the "libraries" section under the Android library.

To reference use import some.package.com. As letroll says ctrl+shift+o should sort out imports for you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM