2013-07-10 2 views
0

내 Android JAR 파일을 만드는 중입니다.이 JAR에는 NoClassDefFound 오류가 발생하지만 계속 호출해야하는 활동이 포함됩니다. 이것은 JAR에 포함 된 활동에 대한 문제 일 뿐이며, 외부 JAR에서 호출 된 다른 모든 객체는 정상적으로 작동합니다.Android 사용 활동 Jar - NoClassDefFoundError

다음은 내가 LibraryTest라는 새로운 라이브러리 프로젝트를 생성

이 JAR을 만들 때 촬영 한 단계이며, 그것은 어떤 임의의 텍스트 librarymain.xml라는 기본 레이아웃을 가지고 LibraryActivity를 호출 한 활동을 배치 .

이 프로젝트를 라이브러리로 표시하고 bin 폴더에서 JAR을 검색 한 다음 TestAddLibrary라는 새 프로젝트를 만들었습니다. JAR 파일을 lib 폴더에 추가 한 다음 LibraryTest 프로젝트의 librarymain.xml을 TestAddLibrary 프로젝트의 레이아웃 폴더에 추가했습니다.

그런 다음 LibraryActivity를 새 프로젝트의 매니페스트에 추가했습니다. 이

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.testaddlibrary" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="10" 
     android:targetSdkVersion="10" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.testaddlibrary.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.example.librarytest.LibraryActivity" 
      > 
     </activity> 
    </application> 

</manifest> 

같은 매니페스트 외모는 그 다음 새 프로젝트의 주요 활동, 나는 내가 JAR 파일에 저장되어있는 LibraryActivity을 시작하는 버튼을 클릭하면

package com.example.testaddlibrary; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

import com.example.librarytest.LibraryActivity; 

public class MainActivity extends Activity 
{ 
    Button but; 
    Context context; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     context = this; 
     but = (Button) findViewById(R.id.butNext); 

     but.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) 
      { 
       Intent i = new Intent(MainActivity.this, LibraryActivity.class); 
       startActivity(i); 
      } 

     }); 
    } 
} 

, 나는이를 얻을 수 있습니다 이 오류

07-10 09:20:24.798: E/AndroidRuntime(28195): FATAL EXCEPTION: main 
07-10 09:20:24.798: E/AndroidRuntime(28195): java.lang.NoClassDefFoundError: com.example.librarytest.R$layout 07-10 
09:20:24.798: E/AndroidRuntime(28195): at com.example.librarytest.LibraryActivity.onCreate(LibraryActivity.java:20) 
07-10 09:20:24.798: E/AndroidRuntime(28195): at android.app.Activity.performCreate(Activity.java:5104) 07-10 
09:20:24.798: E/AndroidRuntime(28195): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
07-10 09:20:24.798: E/AndroidRuntime(28195): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
07-10 09:20:24.798: E/AndroidRuntime(28195): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-10 09:20:24.798: E/AndroidRuntime(28195): at android.app.ActivityThread.access$600(ActivityThread.java:141) 07-10 
09:20:24.798: E/AndroidRuntime(28195): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-10 09:20:24.798: E/AndroidRuntime(28195): at android.os.Handler.dispatchMessage(Handler.java:99) 07-10 
09:20:24.798: E/AndroidRuntime(28195): at android.os.Looper.loop(Looper.java:137) 07-10 09:20:24.798: 
E/AndroidRuntime(28195): at android.app.ActivityThread.main(ActivityThread.java:5041) 07-10 
09:20:24.798: E/AndroidRuntime(28195): at java.lang.reflect.Method.invokeNative(Native Method) 07-10 
09:20:24.798: E/AndroidRuntime(28195): at java.lang.reflect.Method.invoke(Method.java:511) 07-10 09:20:24.798: 
E/AndroidRuntime(28195): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-10 09:20:24.798: E/AndroidRuntime(28195): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 07-10 
09:20:24.798: E/AndroidRuntime(28195): at dalvik.system.NativeStart.main(Native Method) 

이 문제와 관련하여 StackOverflow에 관한 몇 가지 질문을 읽었지만 읽지 않은 내용은 도움이되었습니다. 나는 ADT Eclipse 플러그인의 최신 버전을 가지고 있는데, 나는 Order와 Export에서 안드로이드 의존성과 프라이빗 라이브러리를 체크했다.

누구든지이 문제의 원인을 파악할 수 있습니까? 어떤 도움을 많이 주시면 감사하겠습니다!

편집 :이 내 코드는 그래서 그들에게 당신은 jar 파일에 자원을 패키지 할 수없는 내 코드

+0

리소스 파일을 jar 파일로 패키지 할 수 없습니다. 당신의 액티비티는 리소스 파일에있는 리소스를 참조하기 때문에 jar 파일로 패키징 할 수 없습니다. 당신은 구글 플레이 서비스 라이브러리 프로젝트처럼 안드로이드 프로젝트의 라이브러리 프로젝트를 참조해야합니다 – Raghunandan

+0

다른 사람들이 내 코드를 보지 못하게하려면 어떻게해야합니까? LibraryTest를 Google Play 서비스 팩과 동일한 방법으로 추가했지만 코드를 모두 볼 수 있으므로이 프로젝트를 다른 사용자와 공유 할 때 내 코드가 숨겨져 있는지 확인해야합니다. – AdamM

+0

도서관 프로젝트 이러한 프로젝트 Android 프로젝트에서 참조 할 수있는 공유 가능한 Android 소스 코드 및 리소스를 포함합니다. 재사용 할 공통 코드가있는 경우 유용합니다. ** 라이브러리 프로젝트를 장치에 설치할 수는 없지만 빌드 할 때 .apk 파일로 가져옵니다. ** – Raghunandan

답변

2

를 보지 않고 다른 사람에게이을 공유 할 수 있습니다 숨길 수해야한다는 것입니다 뭐하는 거지 다른 이유를 언급하는 것을 잊었다.

jars로 리소스를 참조하지 않는 순수한 java 파일을 패키지화 할 수 있습니다.

귀하의 경우에는 안드로이드 프로젝트에서 라이브러리 프로젝트를 참조해야합니다.

도서관 프로젝트는

이 프로젝트는 안드로이드 프로젝트에서 참조 할 수있는 공유 가능한 안드로이드 소스 코드와 리소스가 포함되어 있습니다. 재사용 할 공통 코드가있는 경우 유용합니다. 라이브러리 프로젝트는 장치에 설치할 수 없지만 빌드 할 때 .apk 파일로 가져옵니다. 당신은 JAR 파일에 라이브러리 프로젝트를 내보낼 수 없습니다

가장 가까운 리소스를 찾을 수있는 코멘트에서 질문에

http://developer.android.com/tools/projects/index.html

라이브러리는 바이너리 파일로 배포 할 수 없습니다

(예 : JAR 파일). 이것은 SDK Tools의 차기 버전에서 추가 될 것입니다.

How to create jar for Android Library Project

+1

건배. Btw는 숨겨진 코드로 jar 파일, 라이브러리 및 리소스를 제공하는 방법을 알아 냈습니다. http://blog.sofisoftware.com/post/2011/10/05/Android-Library-projects-and-Jars를 읽으십시오. – AdamM

+0

@AdamM 다음에 서표를 사용하겠습니다. – Raghunandan

+0

그냥 기사의 링크를 클릭하면 작동하지 않습니다. 기사의 맨 아래로 건너 뛰기 만하면 2 단계로 간단하게 설명 할 수 있습니다. 직접 테스트하여 완벽하게 작동합니다. – AdamM

관련 문제