일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 아비투스
- 커스텀린트
- 목적중심리더십
- 소프시스 밤부 좌식 엑슬 테이블
- 베드테이블
- 지지않는다는말
- 테트리스
- 프래그먼트
- 함수형 프로그래밍
- 면접
- 한단어의힘
- 어떻게 나답게 살 것인가
- 한달독서
- 끝말잇기
- 캐치마인드
- 슬기로운 온라인 게임
- 한달어스
- 목적 중심 리더십
- 베드트레이
- 북한살둘레길
- 안드로이드
- 재택근무
- 좌식테이블
- T자형인재
- 한달브런치북만들기
- 1일1커밋
- 자취필수템
- 리얼하다
- 소프시스
- 브런치작가되기
- Today
- Total
정상에서 IT를 외치다
[Firebase Crashlytics] 안드로이드 에러 리포트 사용기 본문
안녕하세요. 블랙진입니다.
먼저 Firebase Crashlytics 은 안드로이드 에러 리포트 입니다. 앱에서 충돌이 일어날때 실시간으로 데이터를 받아볼 수 있게 해주는 구글에서 제공해 주는 ARCA(Applicarion Crash Report For Android)입니다.
Firebase Crashlytics 설치방법?
설치 방법은 위 페이지에 상세히 나와 있어 시작하는데는 큰 어려움은 없습니다. 그럼 Firebase Crashlytics 직접 사용해보고 테스트한 내용에 대해서 공유하겠습니다.
FireBase Crashlytics 오류 보고서 맞춤 설정
1. 커스텀 키 추가
비정상 종료로 이어지는 앱의 구체적인 상태를 커스텀 키 추가를 통해 확인할 수 있습니다.
Crashlytics.setString("user_name", "BlackJin")
Crashlytics.setInt("uuid", 1000)
Crashlytics.setString("mode", "릴리즈")
Crashlytics의 위 와같이 Key, Value 값을 설정해 주면 다른 곳에서 발생하는 모든 에러에 커스텀 키 값이 표시됩니다. 물론 중간에 값을 바꾸면 바뀐 값이 적용됩니다. 에러 리포트는 기기에 대한 정보만을 받아 볼 수 있는데 커스텀 키를 통해 로그인된 유저의 정보와 같은 앱의 구체적인 상태 값을 받아 올 수 있습니다.
에러에서 "키" 값을 선택화면 위와 같이 설정해준 커스텀 키값을 확인하실 수 있습니다.
2. 맞춤 로그 메시지 추가
맞춤 로그를 설정하면 어떻게 될까요? 저는 두가지 화면을 만들어서 테스트 해봤습니다. MainActivity, DetailActivity 그리고 Button 클릭시 크러시를 발생시켰습니다.
MainAcitivty init()
Crashlytics.log("메인 엑티비티 로그1")
Crashlytics.log(Log.DEBUG, "MyTag", "blackJinTest")
DetailAcitvity init()
Crashlytics.log("디테일 엑티비티 로그2");
DetailActivity Button()
Crashlytics.log("디테일 엑티비티 로그3");
Crashlytics.getInstance().crash(); // 크러시 발생
순서가 보이시나요?
MainActivity -> DetailActivity -> Button Click -> Crash 입니다. 이렇게 발생시키고 찍힌 로그를 확인해 봤습니다.
에러의 로그 탭에서 확인할 수 있었습니다. 찍어둔 로그가 순서대로 찍힌것을 확인할 수 있습니다. 이렇게 로그 정보를 통해 이벤트에 대한 배경 정보를 보다 정확하게 알아낼 수 있습니다. 추가적으로 위 파랑 네모를 보면 MyTag 라고 적혀있습니다. 왜 여기는 다르게 표시된걸 까요?
// 로그를 비정상 종료 데이터에 연결하고 Firebase Console에 표시합니다.
Crashlytics.log("메인 엑티비티 로그1")
//오류 보고서 및 Log.println()에서도 로그를 표시하고 볼 수 있습니다.
Crashlytics.log(Log.DEBUG, "MyTag", "blackJinTest")
try catch 구문을 사용해 catch 문으로 빠진 에러는 심각하지 않은 에러로 분류 할 수 있습니다.
try {
Crashlytics.getInstance().crash()
} catch (e: Exception) {
Crashlytics.logException(e)
}
앱에서 발생하는 크러시 수집을 중지하는 옵션입니다. 위 이미지와 같이 두가지 설정만 추가해 주면 됩니다. 필자는 개발시에만 에러를 전송시키지 않게 하기 위해 manifestPlaceholders 를 사용하여 디버그 모드에서는 크러시 전송을 막고 릴리즈 모드에서는 전송될 수 있게 했습니다. (관련 링크)
app/build
buildTypes {
debug {
...
// crashlytics 실행하지 않음manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
...
// crashlytics 실행manifestPlaceholders = [enableCrashReporting:"true"]
}
}
<application
...>
...
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${enableCrashReporting}"/>
</application>
debug {
...
// crashlytics 실행하지 않음
manifestPlaceholders = [enableCrashReporting:"false"]
// crashlytics 플러그인을 사용하지 않음
ext.enableCrashlytics = false
}
ext.enablaCrashlytics = flase 를 추가해 줍니다. 그리고 실행하면 어떻게 될까요?
The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.
위 에러와 함께 앱이 죽어버립니다 :(
우리는 한가지 설정을 추가로 해줘야 됩니다. 디버그 빌드 시 런타임에 Crashlytics 키트를 비활성해 해줘야 됩니다. 위 방법은 플러그인을 비활성화 하기 때문에 Crashlytics 초기화 코드도 수정해 줘야 됩니다.
Fabric.with(this, Crashlytics);
이렇게 Fabric를 초기화 했던 코드를 아래와 같이 수정해 줍니다.
// Initializes Fabric for builds that don't use the debug build type.
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();
Fabric.with(this, crashlyticsKit);
디버그 시에넌는 Fabric을 비활성화 하겠다는 코드로 변경해 주면 에러 없이 정상적으로 돌아갑니다. 그리고 최종적으로 빌드 속도를 높이기 위해 한개를 더 추가해 줄 수 있습니다. Crashlytics가 빌드 ID를 업데이트 하는 것을 막아 줌으로써 빌드 속도를 높여 줄수 있습니다.
debug {
// ...
// crashlytics 실행하지 않음
manifestPlaceholders = [enableCrashReporting:"false"]
// crashlytics 플러그인을 사용하지 않음
ext.enableCrashlytics = false
// crashlytics 빌드 ID 업데이트 막기
ext.alwaysUpdateBuildId = false
}
에러 내용 공유하기
잦은 에러가 발생했을 때 이를 빠르게 알고 대처해야 합니다. 이를 위해서는 빈번하게 발생하는 에러를 실시간으로 확인 할 수 있는 방법이 필요합니다.
1. 이메일을 통한 에러 공유
파이어베이스 콘솔에서 사용자 및 권한으로 들어갑니다.
구성원을 추가해주면 심각한 에러가 발생하면 여러분의 이메일로 에러 내용을 보내줍니다.
2. 그외 에러 공유 방법
이번에는 사용자 및 권한 화면의 설정에서 "통합" 탭으로 이동해봅시다.
그러면 에러 공유를 위한 다양한 방법이 있습니다. 위 에러 공유에서 자신의 팀에 맞는 방법을 선택해서 사용하면 되겠죠?
마무리
Firebase Crashlytics 최근에 사용하면서 좋았던 기능에 대해서 내용을 적어봤습니다. 사용한지 얼마 되지 않아 잘못된 내용이 있다면 언제든지 댓글 환영입니다. 혹은 이런식으로 사용하면 더 좋겠다는 의견이 있다면 공유 부탁드리겠습니다. 감사합니다.
'안드로이드' 카테고리의 다른 글
[리엑티브 연습] merage, debounce (로그인 예제) (0) | 2019.06.24 |
---|---|
[in-app updates] 안드로이드 인 앱 업데이트 사용기 (21) | 2019.06.21 |
[Android, Behavior] CoordinatorLayout 에서 Behavior 사용해 보기 (7) | 2019.05.13 |
[Android, Drawing View] 안드로이드에서 뷰가 그려지는 과정 (2) | 2019.04.19 |
[Android, MVP] 리뷰 받은 MVP 예제 with Dagger (0) | 2019.04.17 |