불행히도 MyApp이 중지되었습니다. 어떻게 해결할 수 있습니까?

Apr 29 2014

응용 프로그램을 개발 중이며 실행할 때마다 다음 메시지가 표시됩니다.

불행히도 MyApp이 중지되었습니다.

이 문제를 해결하려면 어떻게해야합니까?


이 질문에 대해-분명히 스택 추적이란 무엇이며 애플리케이션 오류를 디버깅하는 데 어떻게 사용할 수 있습니까? , 추가 세부 사항없이 애플리케이션이 충돌했다는 질문이 많이 있습니다. 이 질문은 초보자 Android 프로그래머에게 문제를 스스로 해결하거나 올바른 질문을하는 방법을 가르치는 데 목적이 있습니다.

답변

734 nhaarman Apr 29 2014 at 06:55

이 답변은 스택 추적을 검색하는 프로세스를 설명합니다. 이미 스택 추적이 있습니까? " 스택 추적이란 무엇이며 애플리케이션 오류를 디버깅하는 데 어떻게 사용할 수 있습니까? " 에서 스택 추적에 대해 읽어보십시오.

문제

잡히지 않은 항목 RuntimeException이 발생 하여 애플리케이션이 종료되었습니다 .
이들 중 가장 일반적인 것은 NullPointerException.

그것을 해결하는 방법?

Android 애플리케이션 (또는 해당 문제에 대한 모든 Java 애플리케이션)이 충돌 할 때마다 Stack trace콘솔 (이 경우 logcat)에 a 가 기록됩니다. 이 스택 추적에는 문제 해결을위한 중요한 정보가 포함되어 있습니다.

안드로이드 스튜디오

창의 하단 표시 줄에서 Logcat버튼을 클릭 합니다. 또는 alt+ 를 누를 수 있습니다 6. Devices패널 에서 에뮬레이터 또는 장치가 선택되어 있는지 확인하십시오 . 다음으로 빨간색으로 표시된 스택 추적을 찾으십시오. logcat에 많은 정보가 로그인되어있을 수 있으므로 약간 스크롤해야 할 수도 있습니다. 스택 추적을 찾는 쉬운 방법은 오른쪽의 휴지통을 사용하여 logcat을 지우고 앱이 다시 충돌하도록하는 것입니다.

스택 추적을 찾았습니다. 이제 무엇입니까?

예이! 문제 해결의 중간입니다.
스택 추적을 분석하여 정확히 애플리케이션 충돌을 일으킨 원인을 알아 내면됩니다.

" 스택 추적이란 무엇이며 애플리케이션 오류를 디버깅하는 데 어떻게 사용할 수 있습니까? " 에서 스택 추적에 대해 읽어보십시오.

여전히 내 문제를 해결할 수 없습니다!

당신 Exception과 그것이 발생한 라인을 찾았 지만 여전히 그것을 고치는 방법을 찾을 수 없다면 주저하지 말고 StackOverflow에 질문하십시오.

가능한 한 간결하게 작성하십시오 : 스택 추적 및 관련 코드를 게시하십시오 (예 :를 던진 행까지 몇 행 Exception).

121 VladBezden Mar 23 2015 at 06:06

당신이 사용할 수있는 구글의 ADB 도구를 얻기 위해 Logcat file문제를 분석 할 수 있습니다.

adb logcat > logcat.txt

logcat.txt파일을 열고 응용 프로그램 이름을 검색하십시오. 실패한 이유, 줄 번호, 클래스 이름 등에 대한 정보가 있어야합니다.

38 HirenVaghela Mar 18 2015 at 15:01

먼저 앱이 충돌 한 지점 ( Unfortunately, MyApp has stopped.)을 확인합니다. 이를 위해를 사용할 Log.e("TAG", "Message");수 있으며이 줄을 사용하면 logcat에서 앱 로그인을 볼 수 있습니다.

그 후에 앱이 중지 된 지점을 발견하면 사용자 측에서 해결하기가 매우 쉽습니다.

29 RahilAli Jun 11 2015 at 17:58

log cat에서 오류를 확인하십시오.

Eclipse에서 log cat 옵션을 얻습니다.

window-> show view-> others-> Android-> Logcat

로그 고양이에 오류가 있습니다.

그렇지 않으면 디버그 모드에서 응용 프로그램을 실행하여 오류를 확인할 수도 있습니다. 먼저 다음을 수행하여 중단 점을 설정하십시오.

project-> debug as-> Android application을 마우스 오른쪽 버튼으로 클릭하십시오.

28 AliBdeir Nov 06 2016 at 16:23

참고 : 이 답변은 Android Studio 2.2.2를 사용하고 있습니다.

참고 2 : 귀하의 장치가 성공적으로 연결되었다고 생각하고 있습니다.


애플리케이션이 충돌 할 때 가장 먼저하는 일은 LogCat을 살펴 보는 것입니다. Android Studio 하단에는 메뉴 목록이있는 툴바가 있습니다.

"안드로이드 모니터"를 클릭하세요. (위 이미지에 밑줄이 그어진 것입니다. ^)

이제 다음과 같은 결과를 얻을 수 있습니다.

" Verbose"을 " Error"로 변경하십시오. 이제 기록 된 오류 만 표시됩니다. 지금 이러한 모든 오류에 대해 걱정하지 마십시오 (발생한 경우).

확인. 이제 앱을 충돌시키기 위해 한 일을하십시오. 앱이 다운되면 logcat으로 이동합니다. 새 충돌을 많이 가지고 로그 찾을 수 있어야 at:x.x.x하고 : Caused by: TrumpIsPresidentException예 :. Caused by:logcat의 해당 진술로 이동 하십시오.

다음에Caused By:, 일어난 예외가 있어야한다. 제 경우에는 a RuntimeException이고 그 아래에는 다음 과 같은 파란색 링크 가 포함 된 줄이 있어야합니다 .

Caused by:그 아래 어딘가에 파란색 텍스트가있는 줄이 없으면 다른 줄을 찾으십시오 Caused by:.

파란색 링크를 클릭 합니다. 문제가 발생한 위치로 이동해야합니다. 제 경우에는 다음 줄 때문입니다.

throw new RuntimeException();

이제 나는 그것이 왜 충돌하는지 압니다. 내가 직접 예외를 던지기 때문입니다. 이것은 명백한 오류 였습니다.


그러나 다른 오류가 발생했다고 가정 해 보겠습니다.

java.lang.NullPointerException

내 logcat을 확인하고 파란색 링크를 클릭하면 여기로 이동했습니다.

mTextView.setText(myString);

이제 디버그하고 싶습니다. 이 StackOverflow 질문 에 따르면 NullPointerException은 무언가가 있다고 말합니다 null.

그래서 null이 무엇인지 알아 봅시다 . 두 가지 가능성이 있습니다. 어느 쪽이 mTextViewnull의 경우, 또는 myStringnull입니다. 확인하기 위해 mTextView.setText(mString)줄 앞에 다음 두 줄을 추가합니다.

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

이제 이전에했던 것처럼 (Verose를 오류로 변경) "오류"를 "디버그"로 변경하려고합니다. 디버깅으로 로깅하고 있기 때문입니다. 모든 Log 메서드는 다음과 같습니다.

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

그래서 Log.d우리는를 사용했기 때문에 Debug를 확인하고 있습니다. 이것이 우리가 디버그하도록 변경 한 이유입니다.

알림 Log.d에는 첫 번째 매개 변수가 있습니다. 여기서는 "AppDebug"입니다. logcat의 오른쪽 상단에있는 "No Filters"드롭 다운 메뉴를 클릭하십시오. "Edit Filter Configuration"을 선택하고 필터에 이름을 지정한 다음 "Log Tag"에 "App Debug"를 입력합니다. "확인"을 클릭하십시오. 이제 logcat에 두 줄이 표시됩니다.

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

이제 우리는 mTextView가 null임을 압니다.

나는 내 코드를 관찰하고 이제 무언가를 발견했습니다.

나는 private TextView mTextView내 수업의 최상위에 선언했습니다. 그러나 나는 그것을 정의하는 것이 아닙니다.

기본적으로 내 onCreate ()에서 이것을하는 것을 잊었습니다.

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

그래서 그것이 mTextViewnull 인 이유입니다. 제 앱이 무엇인지 말하는 것을 잊었 기 때문입니다. 그래서 그 줄을 추가하고 내 앱을 실행하면 앱이 충돌하지 않습니다.


20 Ani Jul 04 2017 at 11:38

이 팝업은 코드에서 앱 실행을 중지하는 치명적인 예외가 발생한 경우에만 표시됩니다. 그것은 예외가 될 수 NullPointerException, OutOfMemoryException

확인하는 가장 좋은 방법은 스택 추적을 읽고 앱의 원인을 확인하는 빠른 방법 인 Android 스튜디오에서 앱을 아직 개발중인 경우 Logcat을 사용 하는 것입니다.

앱이 이미 라이브 상태이면 logcat을 사용할 수 없습니다 . 따라서 Crashlytics발생하는 모든 예외에 대한 버그 보고서를 제공하도록 구현할 수 있습니다 .

18 Manojahirwar Jun 29 2015 at 18:48

Logcat메시지를 확인 하고 Manifest파일을 확인하십시오 . Activity,사용자 권한을 정의하는 것과 같은 누락 된 것이 있어야합니다 .

15 ShivBuyya Nov 03 2015 at 12:47

다음 도구 중 하나를 사용할 수 있습니다.

  1. adb logcat

  2. adb logcat> logs.txt (편집기를 사용하여 오류를 열고 검색 할 수 있습니다.)

  3. eclipse logcat (eclipse에 표시되지 않는 경우 Windows-> Show View-> Others-> Android-> LogCat으로 이동)

  4. Android Debug Monitor 또는 Android Device Monitor (명령 모니터 입력 또는 UI를 통해 열기)

  1. 안드로이드 스튜디오

Android Debug Monitor 를 사용 하는 것이 좋습니다. 너무 많은 로그가 있고 adb logcat 필터를 통해 모두 어려울 때 Eclipse가 중단되기 때문입니다.

13 alirezaamini Jul 13 2015 at 15:37

당신은 확인해야 Stack trace

그렇게하는 방법?

IDE에서 Windows 양식 LOGCAT 확인

logcat 창이 보이지 않으면이 경로로 이동하여 엽니 다.

window->show view->others->Android->Logcat

Google-Api를 사용하는 경우이 경로로 이동

adb logcat> logcat.txt

12 MayankNema Apr 03 2017 at 16:37

아래 showToast () 메서드에서 컨텍스트 또는 응용 프로그램 컨텍스트에 대한 다른 매개 변수를 전달해야하므로 시도해 볼 수 있습니다.

  public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}
11 W0rmH0le Jul 14 2016 at 10:21

Force Close를 만날 때 (앱 작동이 중지 될 때)에 대한 기본적인 Logcat 분석을 공유하겠습니다.

문서

로그 수집 / 분석을위한 Android의 기본 도구는 logcat입니다.

여기 logcat에 대한 Android 페이지입니다.

Android Studio를 사용하는 경우이 LINK를 확인할 수도 있습니다 .

캡처

기본적으로 다음 명령을 사용하여 수동으로 logcat을 캡처 할 수 있습니다 (또는 AndroidStudio에서 AndroidMonitor 창 확인).

adb logcat

원하는 메시지를 필터링하고 표시하는 데 도움이되는 명령에 추가 할 수있는 매개 변수가 많이 있습니다 ... 이것은 개인적인 것입니다 ... 저는 항상 아래 명령을 사용하여 메시지 타임 스탬프를 가져옵니다.

adb logcat -v time

출력을 파일로 리디렉션하고 텍스트 편집기에서 분석 할 수 있습니다.

분석하는

앱이 충돌하는 경우 다음과 같은 메시지가 표시됩니다.

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

로그의이 부분은 많은 정보를 보여줍니다.

  • 문제가 발생한시기 : 07-09 08:29:13.475

문제가 언제 발생했는지 확인하는 것이 중요합니다 ... 로그에서 여러 오류를 발견 할 수 있습니다 ... 올바른 메시지를 확인하고 있는지 확인해야합니다. :)

  • 충돌 한 앱 : com.example.khan.abc

이렇게하면 어떤 앱이 충돌했는지 알 수 있습니다 (메시지에 대한 로그를 확인하기 위해).

  • 어떤 오류 : java.lang.NullPointerException

NULL 포인터 예외 오류

  • 오류에 대한 자세한 정보 : Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

개체 onBackPressed()에서 메서드를 호출하려고했습니다 FragmentActivity. 그러나 그 목적은 null당신이 그것을했을 때였습니다.

  • 스택 추적 : 스택 추적은 메소드 호출 순서를 보여줍니다. 가끔 오류가 호출 된 메소드에서 발생하지 않고 호출 된 메소드에서 발생합니다.

    com.example.khan.abc.AudioFragment $ 1.onClick (AudioFragment.java:125)에서

file에서 오류가 발생했습니다. 메소드 com.example.khan.abc.AudioFragment.java내부 onClick()의 줄 : 125(stacktrace는 오류가 발생한 줄을 보여줍니다)

호출 :

at android.view.View.performClick(View.java:4848)

전화 :

at android.view.View$PerformClick.run(View.java:20262)

전화 :

at android.os.Handler.handleCallback(Handler.java:815)

기타....

개요

이것은 단지 개요 일뿐입니다 ... 모든 로그가 단순하지는 않지만 오류가 특정 문제를 제공하고 모든 문제를 자세히 표시합니다. 아이디어를 공유하고 초급 수준의 정보를 제공하기위한 것입니다 ...

제가 도와 드릴 수 있기를 바랍니다 ... 감사합니다

9 BiswajitKarmakar May 15 2016 at 14:45

LogCat을 사용하여 앱 충돌의 원인을 찾으십시오.

Android Studio 를 사용하는 경우 Logcat을 보려면 ALT + 6 또는

Eclipse 를 사용하는 경우 Window-> Open Perspective-> 기타-LogCat

LogCat으로 이동하여 드롭 다운 메뉴에서 오류를 선택합니다. 여기에는 디버그에 도움이되는 모든 필수 정보가 포함됩니다. 그래도 도움이되지 않는 경우 LogCat을 질문에 대한 편집으로 게시하면 누군가 도와 줄 것입니다.

8 felislynx.silae Oct 02 2017 at 22:07

어떤 이유로 앱이 좋은 스택 추적없이 충돌하는 경우. 첫 번째 줄에서 디버그하고 충돌 할 때까지 한 줄씩 이동하십시오. 그러면 어떤 라인이 문제를 일으키는 지 대답 할 것입니다. 아마 그런 다음 try catch 블록에 래핑하고 오류 출력을 인쇄 할 수 있습니다.

6 Pelpotronic Mar 22 2015 at 15:50

스택 추적이나 추가 오류 메시지없이 자체적으로이 오류 메시지를받을 수도 있습니다.

이 경우 Android 매니페스트가 올바르게 구성되었는지 확인하고 (라이브러리에서 발생하는 모든 매니페스트 병합 및 라이브러리에서 발생하는 모든 활동 포함) 매니페스트 파일에서 애플리케이션에 표시되는 첫 번째 활동에 특히주의해야합니다. .

6 naXa Sep 11 2018 at 15:35

개발 중 충돌

내가 가장 좋아하는 도구 인 logview 를 사용하여 로그를 얻고 개발 중에 분석하십시오. Linux에서 실행할 때 및 실행 파일
로 표시해야합니다 ../logview./lib/logview.jar

마음에 들지 않는 경우 Android 용 대체 데스크톱 로그 뷰어 가 많이 있습니다.

야생에서 충돌

Firebase Crashlytics 와 같은 실시간 오류보고 도구를 통합하여 사용자 기기에서 발생한 처리되지 않은 예외의 스택 추적 을 가져옵니다.

현장에서 버그를 처리하는 방법에 대해 자세히 알아 보려면 버기 앱을 출시하는 방법 (그리고 이야기를 들려주는 라이브)을 읽어 보세요.

5 KopiBryant May 20 2018 at 00:24

사람들은 실수를하고 코딩도합니다.

어떤 error일이 발생하면 항상 붉은 색 텍스트로 logcat을 확인하십시오. 그러나 빨간색 텍스트에 밑줄 이있는 파란색 텍스트에서 실제 문제를 찾을 수 있습니다 .

새를 만드는 경우 activity항상 파일 activity에서를 선언 AndroidManifest하십시오.

Permission을 추가하는 경우 AndroidMainifest파일에서도 선언하십시오 .

5 Ashish Mar 26 2019 at 11:42

Logcat - Android Studio의 개발 단계에서 로그를 확인하려면

처음에 Logcat을 지우고 앱이 다시 충돌하도록하여 충돌 한 로그 세부 정보 만 얻을 수 있도록합니다. 스택 추적을 확인해야합니다.

불행히도 MyApp이 중지되었습니다. 그것에 대한 많은 이유가 있습니다. 로그에서 동일하게 확인할 수 있습니다. 이를 위해 Log.e ( "TAG", "Message");

다음과 같은 앱 충돌 중 일반적인 오류 :

  1. 코딩 실수 (키워드 오용)
  2. 속성 이름이 일치하지 않습니다.
  3. 지원되지 않는 플러그인 (아마도).
  4. 버전이 일치하지 않습니다 (아마도).
  5. AndroidManifest 파일에 활동이 없습니다.
  6. AndroidManifest 파일에 권한이 없습니다.
  7. 가장 일반적인 NullPointerException.
  8. 선언되었지만 정의되지 않았습니다.

앱 충돌 오류를 해결하려면 :

  • 위의 점을 명심하고 그것을 통과하십시오.
  • 오류가 발생하면 파일 이름도 파란색으로 표시됩니다 (파일을 클릭하면 오류가 발생하는 코드로 이동).
4 MehulSolanki May 22 2019 at 17:40

먼저 앱이 어디서 왜 충돌했는지 확인해야합니다.를 (Unfortunately, MyApp has stopped.).사용하면 LOG무엇이 잘못되었는지 파악할 수 있습니다.

그 후에 앱이 중지 된 지점을 찾으면 지점에서 수정합니다.

4 zapotec Jun 12 2019 at 20:07

터미널에 흥미로운 로그가없는 경우 (또는 앱과 직접 관련이없는 경우) 네이티브 라이브러리로 인한 문제 일 수 있습니다. 이 경우 터미널에서 "삭제 표시"파일을 확인해야합니다.

tombstone 파일의 기본 위치는 모든 장치에 따라 다르지만이 경우 다음과 같은 로그가 표시됩니다. Tombstone written to: /data/tombstones/tombstone_06

자세한 내용은 https://source.android.com/devices/tech/debug 에서 확인 하세요 .

2 MohsenEmami Mar 16 2020 at 17:18

또한 터미널에서이 명령을 실행하면 문제를 찾는 데 도움이 될 수 있습니다.

gradlew build > log.txt 2>details.txt

그런 다음 위의 두 로그 파일 읽기에서 gradlew 파일 위치로 이동해야합니다.