버그 보고

저희가 버그를 수정하고 싶어도 상당수 버그에는 필요한 정보가 포함되어 있지 않습니다. 그래서 저희는 보고서가 작성된 버그에만 저희의 제한된 리소스를 집중하고 있습니다. 버그가 수정될 확률을 높이려면 잠시 이 문서를 읽어주세요.

이 단계를 따르지 않으면 저희는 여러분의 버그를 종결 처리할 것입니다. 그런 경우에는 정보를 더 추가하여 다시 제출하시면 됩니다.

또한 Issue Tracker는 지원 포럼이 아님에 유의하세요. 도구 사용 방법이나 Android 앱의 작동 방식에 대한 질문이 있으시면 stackoverflow.com를 방문하거나 여러 Android 개발자 지원 리소스 중 하나를 방문하세요.

버그 보고 방법

  1. 최신 버전의 도구를 사용 중인지 확인합니다. 이미 수정된 버그를 걸러내는 데 저희가 많은 시간을 보내고 있습니다. 저희가 문제를 종결 처리하고 이 문서를 지적한 경우, 최신 버전 도구를 사용하여 재현 가능한 또 다른 문제를 열어보세요.

  2. 정확한 재현 단계를 설명합니다. 구체적으로 설명해 주세요. 최초 시도에서 저희가 해당 문제를 재현할 수 있다면 수정 가능성은 훨씬 더 높아집니다. 가능한 경우 코드 조각을 포함하세요(또는 버그 재현에 사용할 수 있는 Github 프로젝트를 알려주시면 더 좋습니다). 또한 화면의 내용을 보여주는 스크린샷도 도움이 됩니다.

  3. 예상했던 것과 실제로 보이는 것을 비교하여 설명합니다.

  4. 버전 정보를 포함합니다. Android Studio의 경우 이 정보는 About 대화상자에서 찾을 수 있습니다. Help > About을 클릭하세요(Mac의 경우 Android Studio > About Android Studio). 텍스트를 선택해서 복사할 필요가 없고 Control + C(Mac의 경우 Command + C)를 누른 다음 버그 보고서에 붙여넣으면 됩니다.

  5. 해당되는 경우, 어떤 버전의 자바를 사용 중인지 나열합니다(Android Studio의 경우 이 정보는 About 상자에 포함되어 있습니다).

  6. 어떤 버전의 운영체제를 사용 중인지 나열합니다.

  7. 버그에 대한 요약 설명을 선택합니다. "Bug," "Issue," "Exception," "Not working" 등의 요약 설명으로 제출되는 버그가 얼마나 많은지 아신다면 놀랄 것입니다.

  8. 어떤 종류의 버그는 추가적인 정보가 필요합니다.

다시 말하지만, 버그 재현을 위한 명확한 지침이 매우 중요합니다. 가능한 경우, 파일이나 프로젝트를 공유하면 버그 재현에 도움이 됩니다. 하지만 소유권이 있는 소스 코드를 버그 보고서에 첨부해서는 안됩니다. 또한 원하는 내용을 보여주는 스크린샷도 도움이 됩니다.

이 정보를 수집했다면 여기에서 버그를 제출하세요.

Android Studio 버그에 대한 세부정보

Android Studio 버그에 대한 다음과 같은 추가적인 정보를 포함합니다.

IDE가 멈추는 경우

IDE가 매우 느려지거나 완전히 멈춰버리면 몇 개의 스레드 덤프를 생성하고 버그 보고서에 첨부합니다. 그러면 IDE가 무엇 때문에 그렇게 바쁜지(또는 IDE가 어떤 리소스를 경합 중인지) 알 수 있습니다.

IDE가 느려지긴 하지만 멈추진 않는 경우에는 idea.log 파일을 첨부합니다(Help > Show Log in Finder 선택). 그러면 IDE가 느려진 이유가 로그에 지속적으로 오류를 기록하기 때문인지 여부를 알 수 있습니다.

IDE에서 메모리가 부족한 경우

IDE에서 메모리가 부족하면 다음 코드를 실행하여 힙 히스토그램을 생성하세요.

jmap -histo:live <pid>

IDE가 다운되거나 예외를 발생하는 경우

다른 유형의 다운에 대해서는 idea.log 파일을 첨부하세요. Help > Show Log in Finder를 선택합니다.

스레드 덤프 생성

스레드 덤프는 JVM에서 실행 중인 모든 스레드의 출력이며 각 스레드의 경우 모든 스택프레임의 출력입니다. 이를 통해 IDE가 무엇 때문에 그렇게 바쁜지 쉽게 알 수 있습니다. 특히 몇 개의 스레드 덤프가 몇 초 차이로 생성되는 경우 쉽게 확인할 수 있습니다.

CPU가 느려지고 IDE가 매우 바쁜 버그나 IDE가 멈추는 듯한 버그의 경우, 스레드 덤프를 통해 어떤 코드에서 많은 작업이 수행 중인지 또는 어떤 스레드가 리소스를 경합 중이며 교착 상태를 유발하는지 정확히 찾아낼 수 있습니다.

JDK에서는 "jstack"이라는 도구가 제공되며 이 도구를 사용하여 스레드 덤프를 생성할 수 있습니다. 먼저, Android Studio 프로세스의 프로세스 ID를 찾아야 합니다. 이를 위해 "jps" 명령을 사용할 수 있습니다. (jstack과 jps는 모두 JDK의 bin 디렉토리에 있습니다. 여러 개의 JDK가 설치된 경우, Android Studio에서 실행 중인 것과 동일한 버전을 사용해야 하며, 이 버전은 Android Studio의 About 상자에서 확인할 수 있습니다.)

Linux, Mac의 경우:

jps -mv | grep studio

Windows의 경우:

jps -mv | findstr studio

예를 들어, 이 경우 다음과 같은 긴 줄이 출력됩니다.

$ jps -mv | grep studio
37605 -Dfile.encoding=UTF-8 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djna.nosys=true ...

왼쪽의 첫 번째 숫자(이 경우 37605)는 프로세스 ID입니다.

그런 다음, 스레드 덤프를 생성하고 dump.txt라는 파일에 저장할 수 있습니다.

jstack -l pid >> dump.txt

이 명령이 작동하지 않는 경우, 스레드 덤프를 생성할 수 있는 플랫폼별 방법이 몇 가지 더 있습니다. 자세한 지침은 IntelliJ 지원을 참조하세요.

Instant Run 버그에 대한 세부정보

Instant Run의 문제를 보고하려면 다음 단계를 따르세요.

  1. Android Studio에서 Instant Run 세션에 대한 추가적인 정보를 기록하도록 설정합니다.
  2. 이전 단계를 완료하기 전에 발생했던 문제에 대한 피드백을 제출하려면, 해당 문제를 재현해 보세요.
  3. Instant Run 문제가 발생한 직후에 보고서를 제출합니다.

저희가 수집하는 것

IDE에서 Instant Run 세션에 대해 다음과 같은 정보를 기록하도록 설정하면 Android Studio 팀이 여러분의 문제를 더욱 정확히 이해할 수 있으며, 이 용도로만 사용됩니다.

  • idea.log: 이 로그는 Android Studio와 SDK 도구가 다양한 작업을 수행할 때 그에 대한 상세 정보를 캡처합니다. 이 로그를 직접 보려면 Help > Show Log in Explorer (Mac의 경우 Show Log in Finder)를 선택합니다.
  • build-info.xml: 이 파일은 Instant Run 기능과 Gradle용 Android 플러그인을 통합하기 위해 Android Studio가 사용하는 중간 파일입니다.
  • build.log: 이 로그는 Gradle에서 빌드 정보를 캡처합니다. 이것은 --info 명령줄 옵션으로 Gradle을 실행하고 View > Tool Windows > Gradle Console을 클릭하면(또는 도구 창 모음에서 Gradle Console 을 클릭하면) 나타나는 출력과 유사합니다.
  • Logcat 출력: 앱이 실행 중인 동안 대상 기기나 에뮬레이터에서 Instant Run 런타임 이벤트(즉, InstantRun 태그가 있는 이벤트)를 캡처합니다. logcat 출력에 대해 자세히 알아보려면 Logcat에서 로그 쓰기 및 보기를 참조하세요.
  • profile.log: 이 로그는 Gradle이 각 빌드 작업을 얼마나 빨리 진행하는지에 대한 프로필을 제공합니다.
  • TARGET-*: 이 파일은 Android Studio가 대상 기기에 따라 명명하는 빈 파일입니다(예: TARGET-MOTOROLA-NEXUS6).

추가적인 로깅 활성화

이 정보를 캡처하고 보내는 권한을 Android Studio에 부여하려면 다음 단계를 따르세요.

  1. Settings 또는 Preferences 대화상자를 엽니다.
  2. Build, Execution, Deployment > Instant Run으로 이동합니다.
  3. Log extra info 확인란을 선택합니다. 이 옵션은 언제든지 비활성화할 수 있습니다.
  4. OK를 클릭합니다.

문제 보고

추가적인 로깅을 활성화한 후, 이전에 발생했던 모든 Instant Run 문제를 재현합니다. 문제를 재현한 직후에 다음과 같이 보고서를 제출합니다.

  1. 메뉴 모음에서 Help > Report Instant Run Issue를 선택합니다. 그림 4에 나타난 것과 유사한 대화상자가 나타납니다.

    그림 4. 자세한 내용을 텍스트 필드에 입력할 수 있으며, 보고서와 함께 Android Studio가 보낼 로그를 검토할 수 있습니다.

  2. 자신의 경험(예: 문제를 재현하는 단계 또는 실제 동작과 예상 동작의 차이)을 설명하는 추가적인 정보를 텍스트 필드에 입력합니다.
  3. 마치면 OK를 클릭합니다.

빌드 도구 및 Gradle 버그에 대한 세부정보

프로젝트 빌드 시에 발생하는 문제나 Gradle 동기화 문제에 대해 다음과 같은 정보를 포함합니다.

  • Gradle Version. File > Project Structure를 선택하고, Project를 클릭한 다음, Gradle Version을 찾습니다.
  • Android Plugin Version. Gradle Version과 동일한 페이지에서 Android Plugin Version을 찾습니다.
  • Module Compile Sdk Version. 위 페이지의 왼쪽 창에서 모듈을 선택하고 Compile Sdk Version을 찾습니다.
  • Module Build Tools Version. 위 페이지에서 Build Tools Version을 찾습니다.
  • Android SDK Tools Version. Tools > Android > SDK Manager를 선택하고, SDK Tools를 클릭한 다음, Android SDK Tools를 찾습니다.

Android Emulator 버그에 대한 세부정보

에뮬레이터 버그에 해당하는 다음과 같은 정보를 포함시킵니다.

  • Emulator Version. 에뮬레이터에서 Extended controls를 열고, Help를 클릭한 다음, About 탭을 클릭하여 Emulator Version
  • Android SDK Tools 버전을 찾습니다. Tools > Android > SDK Manager를 선택하고, SDK Tools를 클릭한 다음, Android SDK Tools+ Host CPU Model을 찾습니다.
    • Linux의 경우: /proc/cpuinfo을 엽니다
    • Windows의 경우: My Computer를 마우스 오른쪽 버튼으로 클릭하고 Properties를 선택합니다
    • Mac의 경우: Apple 아이콘을 클릭하고 About This Mac
  • 기기 이름을 클릭합니다. AVD Manager에서 기기에 해당하는 Actions 열의 드롭다운 메뉴를 클릭하여 열고, View Details를 선택합니다(또는 $avdname.avd/config.ini 파일을 엽니다). hw.device.name의 항목을 찾습니다. 예: “hw.device.name=Nexus 5”