java.lang.RuntimeException : 활동 ComponentInfo를 인스턴스화 할 수 없습니다


151

샘플 코드를 실행하려고했습니다 .Android 1.5 에뮬레이터에서 응용 프로그램을 시작하는 동안 이러한 오류가 발생했습니다 .... 힌트가 하나 있습니다 ..?

LogCat의 오류 :

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

편집 이 오류는 대부분의 초보자에게 발생합니다. 모든 활동을 매니페스트 파일에 추가해야한다는 것입니다.


감사합니다 Dan Breslau ... 지금은 더 좋아 보입니다.
— rahul

1
죄송합니다 .. 시간을 줘서 죄송합니다. 방금 매니페스트 파일에 새 클래스를 추가하는 것을 잊었습니다.
— rahul

1
내 도구 (Eclipse & SDK 관리자)를 업데이트하여 프로젝트에 안드로이드 지원 라이브러리를 추가 할뿐만 아니라 나를 위해 수정했습니다.
— Hayden Thring

답변:


137

그것은 당신의 의도의 문제입니다.

당신을 추가하십시오 Activity당신에 AndroidManifest.xml.

새로운 활동을하고 싶을 때에는에 등록해야합니다 AndroidManifest.xml.


4
활동을 확장하지 않고 일반적인 기능 만 포함하는 수업이 있습니다. 하지만 여전히이 예외가 발생합니다. 왜?
— Manoj Kumar

내 프로젝트에서는 XML 파일에서 android : name을 볼 때 클래스가 공개되지 않았다고 말합니다. 주요 활동에서 수업 전에 공개를 추가하면 문제없이 앱이 실행됩니다. 기묘한.
— Codebeat

내가 활동 클래스에서 다른 방법을 추가 .. 내가 개발하고있는 네이티브 응용 프로그램에서이 문제를 가지고 있었고, 내가 나를 위해 ..이 오류를 받기 시작했다 깨끗한 + 해결 ..이를 다시
— ashishsony

6
또 다른 옵션은 귀하의 활동이 매니페스트에 있지만 abstract(리팩토링 중에 실수를하고 오류 메시지가별로 도움이되지 않음)으로 선언됩니다 .
— Czechnology

59

보기 onCreate()가 잘못된 보기를 찾으려고 시도했을 수 있습니다 .

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  ...
}

2
와우 고마워 당신은 생명의 은인입니다. 꽤 어리석지 만 감사합니다. 지금 일주일 동안 나를 괴롭 히고 있었다.
— meain

같은 실수를하고 있었다)
— 수밋 제이 자

여기에도 같은 실수가 있습니다. 감사합니다
— Pooja

53

java.lang.RuntimeException 을 얻는 다른 방법이 있습니다 . 활동 ComponentInfo 예외 를 인스턴스화 할 수 없으며 시작하려는 활동은 abstract 입니다. 나는이 멍청한 실수를 한 번했고 간과하기가 매우 쉬웠다.


13
또한 활동은 공개되어야합니다 (이것은 내 실수였습니다).
— djjeck

2 년 후 귀찮게해서 죄송하지만 왜 추상 활동을 시작할 수 없는지 궁금했습니다.
— BenjaminFranklin

2
@BenjaminFranklin 추상 클래스는 완료되지 않았으며 부분이 누락되었음을 의미합니다. 키워드 abstract가있는 클래스를 접두어로 사용하면 클래스를 직접 인스턴스화 할 수 없지만 상속을 통해서만 가능합니다. 다른 클래스는 추상 클래스의 누락 된 기능을 구현합니다.
— Kit10

이미 추상 클래스를 상속했지만 여전히 작동하지 않습니다. pls 더 설명 하시겠습니까?
— Mohammedsalim Shivani

53

내 경우에는 Google지도 라이브러리를 추가하는 것을 잊었습니다.

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

또한 활동 경로 전에 이전 점이 누락되지 않았는지 확인하십시오.

<activity android:name=".activities.MainActivity"/>

2
감사합니다, @Maragues !! 같은 문제였습니다! 내 문제를 해결했다. :)
— cmcromance 7:26에

27

영상

이 문제로 인해 발생합니다. apk로 내 보내야 할 항아리를 확인하지 않았으며 이와 동일한 일이 발생했습니다. 앱을 실행하는 데 필요한 항아리를 선택하십시오.


이 문제를보고 각 종속성 구성 요소를 올바르게 시도하십시오. 예를 들어, Android Studio (또는 Intellij IDEA)에서 종속성에 대한 올바른 범위 (Provided, Compile, ...)를 선택하십시오. 제 경우에는 제공됨을 컴파일로 변경하고 정상적으로 작동합니다.
— dayanruben

15

이 문제도 발생했지만 약간 다른 방식으로 발생합니다. 내 시나리오는 다음과 같습니다.

앱 세부 정보 :

  • 라이브러리로 ActionBarSherlock 사용
  • ActionBarSherlock 라이브러리에서 android-support-v4-r7-googlemaps.jar를 사용하여 기본 프로젝트에서 "맵 조각"을 사용할 수 있습니다.
  • 기본 프로젝트의 빌드 경로에 항아리를 추가했습니다.
  • <uses-library android:name="com.google.android.maps" />라이브러리 프로젝트와 기본 프로젝트의 매니페스트에 포함 (라이브러리에서 필요하지 않을 수 있습니까?)
  • 기본 프로젝트의 매니페스트에는 적절한 활동 정의와 모든 적절한 속성이 있습니다.
  • 추상적 인 활동이 나이 문제와 관련하여 스택 오버플로에서 본 다른 문제가 없었습니다.

그러나 여전히 원본 게시물에 설명 된 오류가 발생하여 사라질 수 없었습니다. 그러나 문제는 한 측면에서 약간 달랐습니다.

  • 내 장치에 응용 프로그램을 새로 설치하는 경우에만 영향을 미쳤습니다. 앱이 처음 설치 될 때마다 다음과 같은 몇 가지 "경고"가 발생합니다. FragmentActivity의 수퍼 클래스를 확인할 수 없습니다
  • 이러한 경고는 ActionBarSherlock 라이브러리로 다시 추적됩니다.
  • 앱이 강제로 닫히고 충돌합니다.
  • 앱을 즉시 다시 빌드하고 재배치하면 정상적으로 작동했습니다.
  • 충돌이 발생한 유일한 시점은 완전히 새로운 설치였습니다. 앱을 제거하고 Eclipse에서 빌드하고 다시 배포하면 충돌이 발생합니다. 두 번째로 빌드 / 배포하면 제대로 작동합니다.

어떻게 고쳤습니까?

  • ActionBarSherlock 라이브러리 프로젝트에서 android-support-v4-r7-googlemaps.jar을 빌드 경로에 추가했습니다.
  • 이 단계만으로도 문제가 해결되지 않았습니다

  • jar가 빌드 경로에 추가되면 Java 빌드 경로> 주문 및 내보내기 탭에서 순서를 변경했습니다. JAR을 목록의 첫 번째 항목으로 설정했습니다 (/ src 및 / gen 항목 다음의 마지막 항목 임). ).

  • 그런 다음 앱을 다시 빌드하고 장치에 다시 배포했습니다. 새로 설치하면 예상대로 작동했습니다. 확실하게, 나는 그것을 2-3 번 다시 제거한 다음 다시 설치했습니다-여전히 예상대로 작동했습니다.

이것은 완전한 신인 실수 일 수도 있지만 게시물과 코드를 파헤쳐 서 알아내는 데 꽤 오랜 시간을 보냈으므로 다른 사람에게 도움이되기를 바랍니다. 모든 상황을 고칠 수는 없지만이 특별한 경우에는 내 문제에 대한 해결책이되었습니다.


감사! Google Admob SDK 예제 "adcatalog"를 사용할 때이 문제가 발생 하여이 오류가 발생했을 때 도움이되었습니다. 라이브러리 옆의 확인란을 선택하는 것이 중요합니다. 내 경우에는 지원 및 admobsdk 항아리.
— jsmars

14

이것은 실제 질문과 관련이 없을 수도 있지만 필자의 경우 Kotlin을 구현하려고 시도했지만 생략했습니다. apply plugin: 'kotlin-android' . MainActivity를 .kt 파일로 인식 할 수 없기 때문에 오류가 발생했습니다.

그것이 누군가를 돕기를 바랍니다.


1
또한 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONmain build.gradle
— Rajkiran

11

이 오류는 또한이 실수를하는 것과 같은 메소드 외부에서 코드를 실행하려고하는 바보 같은 실수의 궁극적 인 징후 일 수 있습니다 (예 : 기침, 내 친구가 코드를 한 번 보여줬을 때와 같이) :

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

이보다는

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

1
큰 도움. 내 문제를 해결하고 첫 번째로 완벽하게 작동하는 안드로이드 앱을 만들도록 이끌었습니다
— TheUnCola

7

프로젝트 에서 Binand Gen폴더를 삭제하고 (프로젝트가 빌드 될 때 자동으로 돌아옴)-> 메뉴-> 프로젝트-> 정리에서 프로젝트를 정리 하여이 문제를 제거했습니다.

감사.


6

내 경우에는 설정하지 않았습니다 setContentView(R.layout.main);

새 클래스를 만드는 경우 onCreate(Bundle savedInstanceState)메소드 에서 설정하도록 설정하지 마십시오 .

나는이 어리석은 실수를 여러 번했다.


6

작업 프로젝트를 정리하거나 이클립스를 다시 시작하면됩니다. 그런 다음 프로젝트를 실행하십시오. 작동합니다.


이 문제는 여러 번 발생했습니다. 이제는 문제의 근원 일 수있는 IADL 파일을 해결할 수 없습니다. 이클립스는 오래된 파일을 기반으로 컴파일되었습니다. .
— 헌터 - Orionnoir

6

나에게 내 패키지 문자열 AndroidManifest.xml이 잘못되었습니다 (자습서에서 복사). 이 파일의 패키지 문자열이 주요 활동 위치와 같은지 확인하십시오. 예 :

 package="com.example.app"

"Manifest"탭에서 AndroidManifest.xml 파일을 열고 패키지 옆의 텍스트 상자에 입력하거나 찾아보기 버튼을 사용하면 쉽게 할 수 있습니다.

또한 내 활동의 패키지 문자열이 잘못되었습니다.

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

패키지 이름을 바꿀 때 몇 주 후에 같은 오류가 발생했습니다. 이렇게하면 AndroidManifest.xml파일도 업데이트해야 합니다.


5

좋아, 나는 iPhone에서 상당히 경험이 있지만 안드로이드를 처음 사용합니다. 내가 가질 때이 문제가 발생했습니다.

Button infoButton = (Button)findViewById(R.id.InfoButton);

위의 코드 줄 :

@Override
public void onCreate (Bundle savedInstanceState) {
}

수면이 박탈 될 수 있습니다. : P


2
나도 수면을 박탈 당했다
— Oz Mayt

3

최근에 Eclipse를 새로 설치하면이 문제가 발생했습니다. 컴파일러 준수 수준이 Java 1.7로 설정되었고 프로젝트는 1.6이 필요합니다.

Eclipse에서 : 프로젝트-> 특성-> Java 컴파일러-> JDK 준수


2

이 문제점이 발생하여 활동의 "시작 모드"특성을 설정하여 수정하십시오.


2

이 문제점의 또 다른 이유는 라이브러리가 누락되었을 수 있습니다.

속성-> Android로 이동하여 라이브러리를 올바르게 추가했는지 확인하십시오.


1
또한 추가 된 라이브러리가 프로젝트 속성-> Java 빌드 경로-> 주문 및 내보내기
— Phil

2

나는 같은 문제가 있었지만 올바른 이름으로 Manifest 파일에 활동을 선언했습니다.

내 문제는 "libs"폴더에 타사 라이브러리를 가져올 필요가 없었으며 내 프로젝트 (오른쪽 클릭, 속성, Java 빌드 경로, 라이브러리, Add Jar ...)에서 참조해야한다는 것입니다.


2

활동 클래스가 기본 패키지 내에있는 경우 발생할 수 있습니다. 활동 클래스를 새 패키지로 이동하여 수정했습니다. 그리고 manifest.xml 변경

전에

activity android:name=".MainActivity" 

후

activity android:name="new_package.MainActivity"

감사. 그거였다.
— Stephane

2

내 경우 onCreate에는 Activity를 호출 하기 전에도 components (UI)를 초기화하려고했습니다 .

onCreate이후 에 메소드 에서 UI 컴포넌트가 초기화 / 링크되었는지 확인하십시오.setContentView

주의 : 이것은 안드로이드 프로그래밍을 배우는 첫 실수입니다.


2

나에게 그것은 위의 어떤 것과 달랐다.

활동은 추상적이라고 선언되었으므로 오류가 발생합니다. 일단 제거되면 효과가있었습니다.

일찍이

     public abstract class SampleActivity extends AppcompatActivity{
     }

제거 후

     public class SampleActivity extends AppcompatActivity{
     }

1

이것은 NDK를 사용할 때 상당히 자주 발생합니다. 내가 할 때마다 Eclipse에서 "Clean"을 수행해야한다는 것을 알았습니다 ndk-build. 그것이 누군가를 돕기를 바랍니다 :)


1

이 스타일은 스타일 ActionBarActivity이 아닌 AppCompat스타일 을 사용하는 경우에도 발생합니다 .

이 문제를 해결하려면 앱 스타일 부모를 다음 Theme.AppCompat과 같이 설정하십시오.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

멍청이 @Ostkontentitan! funcionou 파라 마임, obrigado.
— Emerson Barcellos

1

프로젝트> 속성> android>를 마우스 오른쪽 버튼으로 클릭하고 이전에 Android 4.4로 수행 한 다른 버전의 Android로 시도한 다음 android 4.3으로 변경하면 작동합니다!


1

나는 같은 문제가 있었다 (활동을 인스턴스화 할 수 없다) :

첫번째 이유 :

나는 접근하고 있었다

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

전에

mCamera = Camera.open();

올바른 방법은 먼저 카메라를 연 다음 매개 변수에 액세스하는 것입니다.

두 번째 이유 : 매니페스트 파일에서 활동을 선언하십시오.

<activity android:name=".activities.MainActivity"/>

세 번째 이유 : 매니페스트 파일에서 카메라 권한을 선언합니다.

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

도움이 되었기를 바랍니다


1

필자의 경우 Facebook SDK 를 포함하려고하는데 응용 프로그램 ID 가 잘못되었습니다 . 따라서 오류가 발생했습니다. 매니페스트 파일에는 적절한 메타 데이터가 있어야합니다.

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

1

Android Studio 2.3.3 및 Android Studio 3.0.0이 설치되어있는 경우 개발을 위해 두 프로그램간에 전환하면이 오류가 발생합니다. 한 프로그램에서 지원되는 클래스가 다른 프로그램에서 지원되지 않는 상황이 존재하기 때문입니다. 프로젝트를 개발하는 데 사용되는 Android Studio 버전의 일관성을 유지하는 것이 중요합니다.


1

이 답변의 djjeck의견에서 제안했듯이 나는 놓쳤다.public 수업 수정자를 .

그것은해야한다

public class MyActivity extends AppCompatActivity {

나 같은 사람에게 도움이 될 수 있습니다.


1

위의 모든 해결책을 시도했지만 아무것도 효과가 없습니다. extend대신에 활동을 추가 한 후AppCompatActivity 하고 정상적으로 작동 .

익숙한

public class MainActivity extends Activity  

대신에

public class MainActivity extends AppCompatActivity 

나는 진짜 문제가 무엇인지 모른다.


0

Activity이전 버전의 Android에서는 사용할 수없고 v4 지원 패키지에는 포함되지 않은 Honeycomb에서 가져 오기를 사용하는 2.2 에서 실행하려고 할 때 이런 일이 발생했습니다 .


0

당신의 새로운 활동은 AndroidManifest.xml좋아합니다".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.