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.