在Android Studio中导入外部jar文件--- NoClassDefFoundError

时间:2013-07-19 16:50:36

标签: jar noclassdeffounderror android-studio build.gradle

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

附上并按顺序:

  1. Android Studio上的项目树。请注意test-jar-to-import.jar内的HelloSheepProject/HelloSheep/libs/
  2. MainActivity.java的内容。它正在尝试创建新的MyFile。没别了。
  3. build.gradle内的HelloSheepProject/HelloSheep/。我添加了一行compile files('libs/test-jar-to-import.jar')
  4. MyFile.java的内容。它是在Eclipse中创建的,并作为jar文件导出。
  5. 尝试在设备上运行时的错误。
  6. 关于我失踪的任何想法?我在./gradlew clean中尝试了HelloSheepProject,但没有帮助。


    enter image description here


    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)
    

2 个答案:

答案 0 :(得分:10)

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

我导入的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)。

答案 1 :(得分:0)

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