
이번 글에서는 인앱 크래시 리포터에 대해 소개드리고자 합니다.
재현이 되지 않아 해결하지 못했던 크래시가 많았다면 이 라이브러리가 도움이 될 것 같습니다.
자세한 코드는 아래 링크에서 확인할 수 있습니다.
GitHub - DongLab-DevTools/Android-Crash-Report-Activity: 크래시 정보를 화면으로 보여주는 라이브러리
크래시 정보를 화면으로 보여주는 라이브러리. Contribute to DongLab-DevTools/Android-Crash-Report-Activity development by creating an account on GitHub.
github.com
개발 동기
저희 회사에선 아래와 같은 플로우로 QA가 진행 됩니다.
- 개발 완료 후 QA 팀에서 검증 진행
- 이슈 발견 시 노션 티켓으로 스크린샷 및 재현 경로를 공유
- 개발자는 노션 티켓을 참고하여 이슈 분석 및 수정
플로우 상으로는 큰 문제가 없으나, 만약 이슈가 재현 되지 않으면 어떻게 될까요?
실제로 QA 진행 시 재현 되지 않는 이슈는 대부분 논이슈(known-issue) 처리 되어 백로그에 쌓이고 있습니다.
이런 경우가 적지 않아 조치가 필요하다고 생각 되었고, 이를 해소하기 위해 인앱 크래시 리포터를 개발하게 되었습니다.
주요 기능 소개
전역 크래시 감지
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
installCrashHandler(this) {
providers {
useDefault()
}
}
}
}
인앱 크래시 리포터는 위와 같이 간단한 선언만으로 연동이 가능합니다.
앱 전역에서 발생한 크래시를 감지하여 크래시 발생 시 앱을 종료하지 않고 에러 리포트 화면을 실행합니다.
Crashlytics 지표에 영향이 없도록 확인 버튼을 누르면 기존 예외를 던지면서 앱을 종료합니다.
크래시 정보 제공
에러 리포트 화면에선 발생 화면, 에러 로그, 디바이스 상태 등 여러 정보를 확인할 수 있습니다.
이슈 재현이 되지 않더라도 여러 정보들로 이슈 추적이 가능합니다.
정보 커스터마이징
class MyCustomProvider : CrashInfoProvider {
override fun collect(
context: Context,
throwable: Throwable,
thread: Thread,
activityName: String
): CrashInfoSection? {
return CrashInfoSection(
title = "커스텀 정보",
type = SectionType.NORMAL,
items = listOf(
CrashInfoItem(
label = "커스텀 필드",
value = "커스텀 값",
type = ItemType.NORMAL
)
)
)
}
}
// 커스텀 정보 추가
installCrashHandler(this) {
providers {
useDefault()
add(MyCustomProvider())
}
}
에러 리포트 화면에 표시되는 정보는 커스텀 가능합니다.
코드, 에러, 일반 텍스트 등 여러 타입으로 데이터 연동이 가능합니다.
기본적으로 제공되는 Provider는 아래와 같습니다.
- BasicInfoProvider (필수)
- ExceptionInfoProvider (필수)
- AppInfoProvider
- BuildInfoProvider
- DeviceInfoProvider
- ThreadInfoProvider
- MemoryInfoProvider
- NetworkInfoProvider
공유 기능
에러 리포트 화면에 대한 공유 기능도 제공합니다.
이슈를 발견한 누구나 쉽게 공유할 수 있습니다.
마치며
현재는 Crashlytics로 에러 로그를 기록하는 것과 큰 차이점은 없어 보입니다.
다만, 해당 기능의 최종적인 목표는 이슈가 발생하기 전까지의 사용자 행동을 보여주는 것입니다.
최근 MVI와 같이 단방향 및 불변 상태 아키텍쳐가 많이 쓰이게 되면서 사용자의 요청(Intent)에 따른 상태(State) 변화를 기록할 수 있습니다.
최종적으로는 에러 리포트 화면만 보고도 정확한 재현 경로까지 파악 가능하도록 개선할 예정입니다.