[ 유용한 라이브러리 ] 안드로이드 인앱 크래시 리포터

 

 

이번 글에서는 인앱 크래시 리포터에 대해 소개드리고자 합니다.

재현이 되지 않아 해결하지 못했던 크래시가 많았다면 이 라이브러리가 도움이 될 것 같습니다.

 

자세한 코드는 아래 링크에서 확인할 수 있습니다.

 

Android-Crash-Report-Activity

 

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가 진행 됩니다.

  1. 개발 완료 후 QA 팀에서 검증 진행
  2. 이슈 발견 시 노션 티켓으로 스크린샷 및 재현 경로를 공유
  3. 개발자는 노션 티켓을 참고하여 이슈 분석 및 수정

플로우 상으로는 큰 문제가 없으나, 만약 이슈가 재현 되지 않으면 어떻게 될까요?

실제로 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) 변화를 기록할 수 있습니다.

 

최종적으로는 에러 리포트 화면만 보고도 정확한 재현 경로까지 파악 가능하도록 개선할 예정입니다.