2013-07-19 4 views
4

Android Studio를 사용하여 새 프로젝트를 만들고 응용 프로그램의 lib에 jar 파일을 복사했습니다. 그런 다음 라이브러리로 추가하여 IDE에서이를 인식하게합니다. 나중에, build.gradle에 추가했고 이제는 잘 컴파일됩니다. 그러나 장치에서 응용 프로그램을 실행하려고하면 NoClassDefFoundError과 충돌합니다. Android Studio에서 외부 jar 파일 가져 오기 --- NoClassDefFoundError

은 첨부 및 순서 : 안드로이드 스튜디오에

  1. 프로젝트 트리. 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의 내용. 이클립스에서 생성되어 jar 파일로 익스포트됩니다.
  5. 장치에서 실행하려고하면 오류가 발생합니다.

내가 누락 된 아이디어가 있습니까? HelloSheepProject./gradlew clean을 시도했지만 도움이되지 않았습니다.


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) 

답변

10

내 문제의 해결책을 찾았습니다. 이 시간 동안 내가 길을 잃어 버렸기 때문에 그것을 삭제하는 대신 스레드를 유지할 것입니다.

Java 7을 염두에두고 가져온 jar 파일을 컴파일/내보내기했습니다. Java 6 준수를 활성화하면 제대로 작동합니다.

을 요약하면, 안드로이드 스튜디오에서 외부 jar 파일 추가 할 때 : 루트/프로젝트/libs와 폴더에

  1. 복사 항아리;
  2. 마우스 오른쪽 버튼을 클릭하고 라이브러리로 추가하십시오.
  3. root/project/build.gradle에 jar를 추가하십시오 (compile files('libs/test-jar-to-import.jar')과 같은 것).
  4. 가져온 jar가 Java 6을 준수하는지 확인하십시오 (현재는 7이 수행하지 않습니다).
+0

내 게시물에'~/sdk/extras/google/gcm/gcm-client/dist/gcm.jar'을 프로젝트에서 새로 생성/libs로 드래그 앤 드롭 한 후 나머지 3 개월을 따릅니다. 당신의 지시. 감사. –

+0

감사합니다. 나는 몇 시간 동안이 일을 해왔다. 내 안드로이드 애플 리케이션은 Java 1.8을 사용하고 클래스 라이브러리는 JDK 8로 설정되었다. 컴파일 된 모든 것은 컴파일되었지만 계속 com.android.ide.common.process.ProcessException : org.gradle.process.internal.ExecException : 프로세스 'command'를 가져왔다. C : \ Program Files \ Java \ jdk1.8.0_25 \ bin \ java.exe '를 실행해야합니다. Netbeans 프로젝트 속성에서 클래스 라이브러리의 바이너리 형식을 JDK 7로 변경하여 이제 작동합니다! 다시 한번 감사드립니다. – Rachel

0

필자의 경우 컴파일시에도 컴파일시 런타임에 동일한 NoClassDefFoundError 오류가 발생했습니다. 이전에 잘 작동했습니다. 그러나 어느 날, 패키지에 새로운 패키지를 추가하여 패키지 이름 공간을 변경했습니다.내 항아리는 이미 응용 프로그램 구조의 일부 였으므로 갑자기 이전에 작동했던 jar 라이브러리에서 알려지지 않은 클래스에 대해 불평하는 새로운 런타임 오류에 다소 놀랐습니다. 필자의 경우, 수정은 간단한 Build-> Clean Project였습니다.

관련 문제