Android의 오류 보고

Firebase 오류 보고는 앱의 오류에 대한 상세 보고서를 만듭니다. 스택 추적의 유사성에 따라 오류를 문제로 그룹화하고, 사용자가 체감하는 영향의 심각도에 따라서 분류됩니다. 자동으로 수신되는 보고서 이외에도 맞춤 이벤트를 기록하여 오류의 원인을 단계별로 포착할 수 있습니다.

오류 보고 설정

Android에서 오류 보고를 설정하는 방법은 다음과 같습니다.

  1. Android 프로젝트에서 Firebase를 설정하지 않았다면 지금 설정합니다.
  2. Firebase 콘솔에서 Firebase 프로젝트에 대상 앱을 추가합니다.
  3. 프로젝트 수준 build.gradle 파일에 오류 보고에 대한 종속 항목을 추가합니다.
    implementation 'com.google.firebase:firebase-crash:16.2.0'

첫 번째 오류 만들기

Firebase 오류 보고는 심각한 오류 또는 포착되지 않은 예외에 대해 자동으로 보고서를 생성합니다. 그러나 예외를 포착했지만 예외 사례를 보고하고 싶은 경우에도 보고서를 생성할 수 있습니다. 이러한 오류를 보고하는 방법은 다음과 같습니다.

  1. 주요 액티비티에서 정적 report 메소드를 호출합니다.
    FirebaseCrash.report(new Exception("My first Android non-fatal error"));
  2. 앱을 실행합니다.
  3. adb logcat 또는 Android 스튜디오 로그에서 오류 보고가 사용 설정되었는지 확인하는 메시지를 찾습니다.
  4. Firebase 콘솔의 오류 보고 섹션에서 오류를 확인합니다. 여기에 오류가 표시될 때까지 1~2분이 걸립니다.

맞춤 로그 만들기

오류 보고를 사용하여 오류 보고서 및 logcat(선택사항)에 맞춤 이벤트를 기록할 수 있습니다. 이벤트를 기록하면서 logcat에 출력하지 않으려면 이 예와 같이 문자열만 인수로 전달하면 됩니다.

FirebaseCrash.log("Activity created");

logcat에 출력하려면 로그 수준 및 태그를 함께 제공해야 합니다.

Proguard 라벨 해독

Proguard는 Proguard 난독화 기호를 원래 이름에 매핑하는 mapping.txt 파일을 생성합니다. Proguard를 사용하는 경우 매핑 파일을 업로드하면 오류 보고 인터페이스에서 해독된 스택 추적을 볼 수 있습니다.

테스트를 위해 다음과 같이 Proguard를 디버그 빌드 유형으로 구성하고 ./gradlew assembleDebug 명령을 사용하여 빌드할 수 있습니다.

debug {
   minifyEnabled true
   proguardFiles getDefaultProguardFile('proguard-android.txt'),
     'proguard-rules.pro'
}

Gradle로 ProGuard 매핑 파일 업로드

오류 보고 플러그인에서 만든 Gradle 작업을 사용하여 Firebase에 ProGuard 매핑 파일을 업로드하면 Firebase 콘솔에서 가독화된 스택 추적을 볼 수 있습니다.

오류 보고 플러그인을 구성하는 방법은 다음과 같습니다.

  1. 루트 수준 build.gradle 파일에 규칙을 추가하여 오류 보고 플러그인을 포함합니다.
        buildscript {
          repositories {
            jcenter()
            // ...
          }
    
          dependencies {
            // ...
            // For Android Studio 2.x, use firebase-plugins version 1.1.1
            classpath 'com.google.firebase:firebase-plugins:1.1.1'
            // For Android Studio 3.0, use firebase-plugins version 1.1.5
            //classpath 'com.google.firebase:firebase-plugins:1.1.5'
          }
        }
    
  2. 앱 프로젝트의 Gradle 파일(일반적으로 app/build.gradle)에 다음 중 'ADD THIS' 아래에 있는 줄을 추가하여 오류 보고 플러그인을 사용 설정합니다.
        apply plugin: 'com.android.application'
        // ADD THIS
        apply plugin: 'com.google.firebase.firebase-crash'
    
        android {
          // ...
        }
    
        dependencies {
          // ...
        }
    
  3. 다음으로 서비스 계정 및 비공개 키를 만듭니다.

    업로드를 인증하는 서비스 계정 키를 다운로드합니다. Firebase 콘솔에서 프로젝트를 선택한 다음 Generate New Private Key(새 비공개 키 생성)를 클릭합니다.

  4. 파일 경로를 $HOME/.gradle/gradle.properties로 설정하여 FirebaseServiceAccountFilePath라는 속성을 추가하거나 명령줄에서 -P 플래그를 사용하여 다른 경로를 지정합니다. 이후에 FirebaseServiceAccountFilePath 속성을 업데이트하여 다른 서비스 계정 파일로 작업을 실행할 수 있습니다.

    명령줄에서 -P 플래그로 다음과 같이 속성을 설정하여 매핑 파일의 경로를 지정할 수도 있습니다.

    ./gradlew -PFirebaseServiceAccountFilePath=/usr/ServiceAccount/MyApp-a287fsd34.json :app:firebaseUploadReleaseProguardMapping
  5. 프로젝트 디렉토리에서 gradlew 명령을 실행하여 APK 빌드와 매핑 파일 업로드를 함께 실행할 수 있습니다. 예를 들면 다음과 같습니다.

    ./gradlew :app:firebaseUploadReleaseProguardMapping

    업로드 작업의 정확한 이름은 빌드 변형 이름에 따라 다르며 다음과 같은 패턴을 따릅니다. firebaseUpload<VariantName>ProguardMapping. 사용 가능한 업로드 작업 이름의 전체 목록을 보려면 다음 gradlew 명령을 실행하세요.

    ./gradlew :app:tasks

    firebaseUploadArchivedProguardMapping 작업을 사용하여 ProGuard 매핑 파일을 업로드할 때 사용할 Gradle 속성을 지정할 수도 있습니다. 다음 예와 같이 이 작업을 사용하여 FirebaseCrashMappingFilePath, FirebaseCrashVersionCode, FirebaseCrashPackageName에 대한 Gradle 속성을 지정할 수 있습니다.

    FirebaseCrashMappingFilePath=path/to/mapping/file
    FirebaseCrashVersionCode=2
    FirebaseCrashPackageName=example.package.name
    
    이 예에서는 프로젝트의 모듈 폴더(일반적으로 app/)에 있는 기본 google-services.json 파일이 사용됩니다. google-services.json 파일을 사용하지 않으려는 경우 FirebaseCrashApiKeyFirebaseCrashAppId에 대한 Gradle 속성도 지정해야 합니다.

여러 APK를 빌드하는 앱 작업

다중 APK 지원을 활용하는 애플리케이션에도 플러그인을 사용할 수 있습니다. 각 빌드 변형 작업에서는 해당 변형의 모든 APK에 사용할 매핑 파일을 업로드합니다.

예를 들어 다음 Gradle 예와 같이 fullRelease라는 빌드 변형이 있고 app-full-armeabi-v7a-release.apk, app-full-armeabi-release.apk 등의 여러 APK를 사용하여 다양한 아키텍처를 지원하는 경우를 가정해 보겠습니다.

    productFlavors {
        full {
            applicationId "com.google.firebase.sample.testapp"
            versionName "1.0-full"
        }
    }

    splits {
        abi {
            enable true
            reset()
            include 'armeabi', 'armeabi-v7a'
            universalApk true
        }
    }

./gradlew :app:firebaseUploadReleaseProguardMapping 작업을 실행하면 app-armeabi-v7a-release.apkapp-armeabi-release.apk에 대한 ProGuard 매핑 파일이 서버에 업로드됩니다. 콘솔에는 해당 업로드가 다음과 같이 출력됩니다.

Successfully uploaded proguard mapping file for app fullArmeabiRelease with versionCode: 1!
Successfully uploaded proguard mapping file for app fullArmeabi-v7aRelease with versionCode: 2!

ProGuard 매핑 파일 직접 업로드

오류 보고로 이동하고 Mapping Files(매핑 파일) 탭을 선택하여 mapping.txt 파일을 직접 업로드할 수도 있습니다.

아래와 비슷한 형식으로 된 파일 경로(앱별로 다름)에서 업로드할 파일을 찾을 수 있습니다.

<project root>/<module name>/build/outputs/mapping/<build type>/<appname>-proguard-mapping.txt

예를 들면 다음과 같습니다.

app/build/outputs/mapping/debug/app-proguard-mapping.txt

알려진 문제

Android 스튜디오 3.0을 사용하는 경우 오류 보고 플러그인 버전 1.1.0 또는 1.1.1을 사용하면 다음 오류가 발생하므로 앱의 루트 수준 build.gradle 파일에서 플러그인 버전 1.1.5를 대신 사용해야 합니다.

Cannot create tasks to upload ProGuard Mapping File.java.lang.IllegalStateException: Resolving configuration 'androidTestAnnotationProcessor' directly is not allowed

다음 단계

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.