4

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 cleanHelloSheepProjectが、役に立ちませんでした。


ここに画像の説明を入力


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)

4

2 に答える 2

0

私の場合、NoClassDefFoundError正常にコンパイルされたにもかかわらず、実行時に同じエラーが発生しました。以前は正常に動作していました。しかし、ある日、アプリに新しいパッケージを追加した結果、パッケージの名前空間が変更されました。私の jar は既にアプリケーションの構造の一部だったので、以前は動作していた jar ライブラリ内の不明なクラスについて突然不平を言うこの新しいランタイム エラーに少し驚きました。私の場合、修正は単純な Build->Clean Project でした。

于 2015-04-26T01:48:54.627 に答える