【问题标题】:Add external jar to android project in eclipse在eclipse中将外部jar添加到android项目
【发布时间】:2011-12-21 20:18:23
【问题描述】:

我正在 Eclipse 中构建一个使用 google-api-java-client 的简单 Android 项目。我正在尝试关注this tutorial 以启动并运行它。我已经通过 SO 搜索了有关如何在 Eclipse 中将 JAR 添加到 Android 项目的答案。他们中的大多数建议将 JAR 添加到 Android 项目内的 lib/ 文件夹中,然后将这些 JAR 添加到项目的构建路径中。这两件事我都做过。该项目编译良好(无论如何,Eclipse 不会抱怨任何错误)。但是当我在模拟器中运行 Android 应用程序时,每当我尝试实例化 google-api-java-client JAR 中的任何类时,我都会得到 ClassDefNotFoundError。例如

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

提高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)

【问题讨论】:

    标签: android eclipse


    【解决方案1】:

    我按照these instructions 一步一步解决了这个问题。当我最初开始设置项目时:

    1. 我将 JAR 文件从 google-api-java-client 项目导入到我的项目的 lib/ 文件夹中
    2. 我右键单击lib/google-api-client... 并选择构建路径> 添加到构建路径

    此时,在 Eclipse 中,我的项目的“Referenced Libraries”部分下出现了一堆库:

    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
    

    但是,当我转到“项目”>“属性”>“Java 构建路径”>“库”时,我看到只列出了 google-api-client...。当我尝试运行该项目时,我得到了ApacheHttpTransportNoClassDefFounError,如原帖中所述。这是因为该类是在google-http-client! 中定义的。通过手动将google-http-client添加到构建路径,问题就解决了。

    经验教训:仅仅因为 JAR 列在 Eclipse 项目的“引用库”下并不意味着这些 JAR 包含在项目的构建路径中。

    【讨论】:

    • 以上链接非常有用。谢谢!
    【解决方案2】:

    也许进口? ctrl+shift+o 有什么作用?

    如果不是,我不确定您是否必须实例化好类,但出现此错误

    【讨论】:

    • Ctrl+shift+o 添加缺少的导入语句。澄清一下,代码编译得很好(没有缺少导入语句)。
    【解决方案3】:

    是的,将 jar 文件放在 lib 文件夹中并将项目添加到构建路径(项目的属性部分。Eclipse 将清理并构建之后。您应该会看到正在使用的 jar 文件,因为它会出现在Android 库下的“库”部分。

    参考使用 import some.package.com。正如 letroll 所说, ctrl+shift+o 应该为您整理导入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 2012-01-22
      • 1970-01-01
      • 2013-09-02
      • 2012-07-22
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多