내 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 파일에 자원을 패키지 할 수없는 내 코드
리소스 파일을 jar 파일로 패키지 할 수 없습니다. 당신의 액티비티는 리소스 파일에있는 리소스를 참조하기 때문에 jar 파일로 패키징 할 수 없습니다. 당신은 구글 플레이 서비스 라이브러리 프로젝트처럼 안드로이드 프로젝트의 라이브러리 프로젝트를 참조해야합니다 – Raghunandan
다른 사람들이 내 코드를 보지 못하게하려면 어떻게해야합니까? LibraryTest를 Google Play 서비스 팩과 동일한 방법으로 추가했지만 코드를 모두 볼 수 있으므로이 프로젝트를 다른 사용자와 공유 할 때 내 코드가 숨겨져 있는지 확인해야합니다. – AdamM
도서관 프로젝트 이러한 프로젝트 Android 프로젝트에서 참조 할 수있는 공유 가능한 Android 소스 코드 및 리소스를 포함합니다. 재사용 할 공통 코드가있는 경우 유용합니다. ** 라이브러리 프로젝트를 장치에 설치할 수는 없지만 빌드 할 때 .apk 파일로 가져옵니다. ** – Raghunandan