【问题标题】:Importing external jar file in Android Studio---NoClassDefFoundErrorAndroid Studio中导入外部jar文件---NoClassDefFoundError
【发布时间】:2013-07-19 01:21:04
【问题描述】:

我使用 Android Studio 创建了一个新项目并将一个 jar 文件复制到我的应用程序的库中。然后将其添加为库,这使得 IDE 可以识别它。后来,我将它添加到build.gradle,它现在编译得很好。但是,当我尝试在设备上运行应用程序时,它会因NoClassDefFoundError 而崩溃。

按顺序附上:

  1. Android Studio 上的项目树。注意HelloSheepProject/HelloSheep/libs/ 中的test-jar-to-import.jar
  2. MainActivity.java 的内容。它正在尝试创建一个新的MyFile。没有别的了。
  3. build.gradle 内的HelloSheepProject/HelloSheep/。我添加了compile files('libs/test-jar-to-import.jar')这一行。
  4. MyFile.java 的内容。它是在 Eclipse 中创建并导出为 jar 文件。
  5. 尝试在设备上运行时出错。

关于我缺少什么的任何想法?我在HelloSheepProject 中尝试了./gradlew clean,但没有帮助。



package top.furrylamb.example.hellosheep;

import android.os.Bundle;
import android.app.Activity;

import top.furrylamb.example.MyFile;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MyFile myFile = new MyFile("hi", "there");
    }

}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    //compile fileTree(dir: "libs", include: "*.jar")
    compile files('libs/test-jar-to-import.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 16
    }
}

package top.furrylamb.example;

public class MyFile {
    public final String left;
    public final String right;
    public MyFile(String left, String right) {
        this.left = left;
        this.right = right;
    }
}

07-19 19:26:33.855  13656-13656/? E/AndroidRuntime: FATAL EXCEPTION: main
        java.lang.NoClassDefFoundError: top.furrylamb.example.MyFile
        at top.furrylamb.example.hellosheep.MainActivity.onCreate(MainActivity.java:15)
        at android.app.Activity.performCreate(Activity.java:5206)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
        at android.app.ActivityThread.access$600(ActivityThread.java:140)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4898)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
        at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: jar noclassdeffounderror android-studio build.gradle


    【解决方案1】:

    我找到了解决问题的方法。由于我已经迷失了几个小时,所以我将保留该线程而不是删除它。

    我导入的 jar 在编译/导出时考虑了 Java 7。一旦我启用了对 Java 6 的合规性,它就可以正常工作了。

    总结一下,在Android Studio中添加外部jar文件时:

    1. 将 jar 复制到 root/project/libs 文件夹;
    2. 右键添加为库;
    3. 将 jar 添加到 root/project/build.gradle(类似于 compile files('libs/test-jar-to-import.jar'));
    4. 确保导入的 jar 符合 Java 6(目前不支持 7)。

    【讨论】:

    • 您的帖子刚刚完成了 3 小时的挫折,在我的情况下,将 ~/sdk/extras/google/gcm/gcm-client/dist/gcm.jar 拖放到新创建的 /libs 项目外,然后按照您的其余说明进行操作。谢谢。
    • 谢谢!我已经在这几个小时了。我的 Android 应用程序使用 Java 1.8,我的类库设置为 JDK 8。所有内容都已编译,但在尝试运行应用程序时不断收到 com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_25\bin\java.exe'' finished with non-zero exit value 1。将类库的二进制格式更改为 JDK 7(来自 Netbeans 项目属性),现在它可以工作了!再次感谢。
    【解决方案2】:

    在我的情况下,我在运行时遇到了相同的 NoClassDefFoundError 错误,即使它编译正常。之前一直运行良好。但是有一天,我向我的应用程序添加了一个新包,这导致包名称空间被更改。我的 jar 已经是应用程序结构的一部分,所以我对这个新的运行时错误突然抱怨以前工作的 jar 库中有一个未知类感到有些惊讶。 就我而言,修复是一个简单的 Build->Clean Project。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-07
      • 2013-05-22
      • 2013-09-21
      • 2021-09-07
      • 2011-05-24
      • 1970-01-01
      • 2014-09-03
      • 2011-02-11
      相关资源
      最近更新 更多