Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

버그 신고

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

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

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

버그 신고 방법

  1. 최신 버전의 도구를 사용 중인지 확인합니다. 이미 수정된 버그를 검토하는 데 많은 시간을 보내고 있습니다. 문제가 종결 처리되었지만 해결되지 않은 경우, 최신 버전을 사용하여 재현 가능하다면 또 다른 이슈를 열어 주세요.

  2. Android 스튜디오에서 Help > Submit Feedback을 선택하여 버그 신고를 엽니다. 이는 버그를 시작하는 가장 쉬운 방법입니다. 사용 중인 Android 스튜디오 버전, 자바 버전, 시스템 정보가 버그 신고에 채워지므로 문제를 제대로 재현하는 데 필요한 정보를 확보할 수 있습니다. (아니면 여기에서 버그를 제출하고 직접 버전 정보를 추가할 수도 있습니다.)

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

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

  5. 버그에 관한 요약 설명을 선택합니다. 저희 입장에서 문제를 분류하기 어렵게 만드는 'Bug', 'Issue', 'Exception', 'Not working' 등의 요약 설명으로 제출되는 버그가 얼마나 많은지 알게 되면 놀라실 것입니다.

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

Android 스튜디오 버그의 경우 세부정보

Android 스튜디오 버그에 특정한 다음과 같은 추가 정보를 포함합니다.

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 스튜디오 프로세스의 프로세스 ID를 찾아야 합니다. 이를 위해 'jps' 명령을 사용할 수 있습니다. jstack과 jps가 모두 JDK의 bin 디렉터리에 있습니다. JDK가 여러 개 설치된 경우 Android 스튜디오에서 실행 중인 것과 동일한 버전을 사용해야 하며, 이 버전은 Android 스튜디오의 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 Support(IntelliJ 지원)을 참고하세요.

빌드 도구 및 Gradle 버그의 경우 세부정보

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

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

Android 에뮬레이터 버그의 경우 세부정보

에뮬레이터 세부정보를 수집하는 가장 쉬운 방법은 확장 컨트롤에서 File a bug 기능을 사용하는 것입니다.

  1. 에뮬레이터 패널에서 More 를 클릭합니다.
  2. Extended controls 창의 왼쪽에서 Bug Report를 선택합니다.

    스크린샷, AVD 구성 정보, 버그 신고 로그와 같은 버그 신고 세부정보를 볼 수 있는 화면이 열립니다. 재현하는 단계를 여기에서 입력할 수 있으며, 기다렸다가 다음 단계에서 생성되는 보고서에 재현 단계를 입력할 수도 있습니다.

  3. 버그 신고의 정보 수집이 완료될 때까지 기다린 후 Send to Google을 클릭합니다. 버그 신고를 폴더에 저장할 수 있는 창이 열리고, 그런 다음 신고를 생성할 수 있도록 브라우저에서 필수 에뮬레이터 세부정보가 채워진 상태로 Google Issue Tracker가 열립니다.

  4. 신고에서 버그 재현 단계와 같은 나머지 세부정보를 완료한 후 버그 신고를 생성할 때 저장된 파일을 첨부합니다.

아니면 다음 세부정보를 수동으로 입력해야 합니다.

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