Crashlytics 대시보드에서 읽을 수 있는 비정상 종료 보고서 받기


Crashlytics Gradle 플러그인은 코드 난독화 시점을 자동으로 감지할 수 있습니다. 빌드 시 매핑 파일이 생성되면 플러그인이 해당 파일을 업로드하며, Crashlytics 서버는 이 파일을 사용하여 앱의 스택 트레이스를 사람이 읽을 수 있는 가독화된 코드로 렌더링합니다.

R8, ProGuard, DexGuard 사용 시 필요한 구성

Crashlytics는 ProGuard와 호환되는 모든 매핑 파일을 가독화할 수 있으며 ProGuard, R8, DexGuard를 사용해 추가로 테스트되었습니다.

앱이 Android Gradle 4.2.0 이상과 함께 난독화 기능이 사용 설정된 상태에서 R8를 사용하는 경우 Crashlytics가 읽을 수 있는 비정상 종료 보고서를 생성합니다. Crashlytics에서 최근에 Kotlin과 R8을 둘 다 사용하는 앱에 대한 지원이 개선되었으나, 이로 인해 예상치 못한 라벨 지정 문제가 발생할 수 있습니다.

앱이 ProGuard 구성 파일을 사용하는 경우 Crashlytics에서 읽을 수 있는 비정상 종료 보고서를 생성하는 데 필요한 정보를 보존해야 합니다. ProGuard 또는 DexGuard 구성 파일에 다음 줄을 추가하면 됩니다.

-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.

DexGuard 관련 질문이나 문제에 대해 도움이 필요한 경우 Guardsquare 지원팀에 직접 문의하세요. ProGuard에 관한 도움이 필요한 경우 Guardsquare 커뮤니티 포럼을 방문하여 전문가의 도움을 받으세요.

난독화된 빌드 변형 유지

Crashlytics Gradle 플러그인이 난독화를 사용하는 변형의 매핑 파일을 업로드하지 않도록 하려면 모듈(앱 수준) Gradle 파일(일반적으로 <project>/<app-module>/build.gradle.kts 또는 <project>/<app-module>/build.gradle)에서 firebaseCrashlytics.mappingFileUploadEnabled Gradle 확장 속성을 false로 설정하세요. 이렇게 하면 난독화된 빌드의 빌드 시간을 단축할 수 있지만 생성된 스택 트레이스는 Firebase Console의 Crashlytics 페이지에 난독화되어 표시됩니다.

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  getByName("debug") {
    minifyEnabled = true
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions += "environment"
productFlavors {
  create("staging") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
  create("prod") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = true
    }
  }
}
}

Groovy

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  debug {
    minifyEnabled true
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions "environment"
productFlavors {
  staging {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
  prod {
    dimension "environment"
    ...
    firebaseCrashlytics {
      mappingFileUploadEnabled true
    }
  }
}
}