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

Dan*_*iel 4 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. 我尝试在设备上运行它时出错.

关于我失踪的任何想法?我试过一次./gradlew clean,HelloSheepProject但没有帮助.


在此输入图像描述


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

}
Run Code Online (Sandbox Code Playgroud)
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
    }
}
Run Code Online (Sandbox Code Playgroud)
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;
    }
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)

Dan*_*iel 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).