ACRA 및 Cloudant를 사용한 자동화된 Android 충돌 보고서

게시 됨: 2022-03-11

기본적인 Android 앱을 만드는 것은 쉽습니다. 반면에 안정적이고 확장 가능하며 강력한 Android 앱을 만드는 것은 상당히 어려울 수 있습니다.

수많은 다른 제조업체에서 수천 개의 사용 가능한 장치를 펌핑하여 단일 코드 조각이 전화기에서 안정적으로 작동한다고 가정하는 것은 기껏해야 순진한 것입니다.

세분화는 개방형 플랫폼의 가장 큰 절충안이며 앱이 프로덕션 단계를 통과한 후에도 오랫동안 계속되는 코드 유지 관리 통화로 대가를 지불합니다.

Android 오류 보고가 중요한 이유

그렇다면 Android 앱이 충돌하거나 응답하지 않으면 어떻게 될까요? 음, "강제 닫기" 대화 상자가 나타나 사용자에게 문제가 발생했음을 알립니다. 앱이 Google Play를 통해 다운로드된 경우 사용자(개발자)가 볼 수 있는 자세한 Android 충돌 보고서(시간, 전화 모델, Android 버전, 스택 추적 등 포함)를 전송하여 충돌을 보고하라는 메시지가 표시됩니다. 개발자 콘솔을 사용하여 범인 버그를 해결할 수 있습니다.

이 모든 것이 매우 좋게 들리지만 Android의 기본 오류 보고에는 큰 문제가 있습니다. 사용자는 이를 사용하지 않는 경향이 있어 개발자는 앱 상태에 대해 무지합니다.

이 모든 것이 아주 좋게 들리지만 Android의 기본 오류 보고를 사용하는 데는 큰 문제가 있습니다. 사용자는 앱이 충돌할 때 조치를 취하지 않는 경향이 있습니다. 실제로 대다수는 Android 오류 보고서를 보내지 않기로 선택합니다. 그렇다면 성실한 개발자로서 어떻게 앱의 충돌 및 실패에 대한 신뢰할 수 있는 통찰력을 얻을 수 있습니까?

신뢰할 수 있는 Android 충돌 로그는 사용자가 충돌 보고서를 보내지 않을 때 특히 중요합니다.

ACRA 소개

ACRA는 "Android용 자동 충돌 보고"의 약자입니다. 몇 줄의 코드로 '수동 오류 보고' 문제를 해결할 수 있는 무료 라이브러리입니다. 라이브러리를 구현하고 모든 것이 적절하게 초기화되면 사용자가 조치를 취하지 않아도 Google 기본값과 동일한 Android 오류 로그(추가된 여러 사용자 정의 옵션 포함)를 자동으로 추출할 수 있습니다.

그 외에도 ACRA를 사용하면 Android 충돌을 사용자에게 알리는 방법을 선택할 수 있습니다. 기본값은 자동 백그라운드 보고 및 사용자 지정 대화 상자를 포함한 대안입니다.

최근까지 ACRA는 Google 스프레드시트의 지원을 받았습니다. 즉, 모든 보고서를 Google 드라이브 계정에서 무료로 호스팅되는 단일 파일로 수신할 수 있었습니다. 불행히도 Google은 앞으로 이 옵션을 사용하지 않도록 요청했기 때문에 충돌 보고서 데이터를 보내기 위한 몇 가지 대안이 남았습니다. 이 중 일부는 이 튜토리얼에서 다룰 것입니다.

  • 표준 이메일(여전히 사용자 상호 작용 필요).
  • 사용자 정의 이메일/HTTP 클라이언트(광범위한 설정 필요).
  • 맞춤형 백엔드(무료에서 상용 솔루션에 이르는 다양한 옵션 포함).

이 기사에서는 Cloudant 백엔드에서 ACRA 보고서를 호스팅하고 acralyzer로 데이터를 시각화하는 솔루션 중 하나를 분석합니다.

Cloudant 백엔드 설정

가장 먼저 해야 할 일은 Cloudant 계정을 등록하는 것입니다. 물론 문제가 있습니다. Cloudant의 서비스는 완전히 무료가 아니지만 가격 페이지에 따르면 월간 5달러 한도를 초과할 가능성은 거의 없습니다(사용자 기반이 많고 코드에 버그가 많이 있는 경우 제외).

일단 등록하고 나면 작동 방식을 이해해야 합니다. 높은 수준에서 백엔드는 두 가지 구성 요소로 구성됩니다.

  1. 스토리지 데이터베이스 또는 더 정확하게는 Apache CouchDB. CouchDB는 데이터를 JSON 형식으로 저장합니다. 즉, Android 장치에서 보낸 모든 보고서는 항목으로 삽입되기 위해 형식과 일치해야 합니다. 데이터베이스 삽입은 간단한 HTTP POST 또는 PUT 요청입니다.
  2. 웹 앱(분석용) 또는 더 정확하게는 CouchApp입니다. 이것은 쿼리를 실행하고 CouchDB 인스턴스에 저장된 데이터를 표시할 수 있는 간단한 JavaScript 애플리케이션입니다.

백엔드가 제대로 작동하려면 이 두 구성 요소를 설정해야 합니다. 이론적으로 소스에서 데이터베이스와 앱을 빌드한 다음 도구를 사용하여 백엔드에 배포할 수 있지만 ACRA의 좋은 사람들은 이미 우리를 위해 그렇게 했습니다. 따라서 가장 쉬운 방법은 원격 데이터베이스와 원격 앱을 복제하는 것입니다.

빈 ACRA CouchDB를 복제해 보겠습니다.

  • Cloudant 대시보드에서 '복제' 섹션을 선택합니다.
  • 원본 데이터베이스로 http://get.acralyzer.com/distrib-acra-storage를 URL로 사용하여 '원격 데이터베이스'를 선택합니다.
  • 대상 데이터베이스로 '새 데이터베이스'를 선택하고 이름을 "acra-{myapp}"(인용 부호 제외)로 지정합니다. {myapp} 매개변수는 앱에 고유해야 하며 데이터베이스 이름은 "acra-"로 시작해야 합니다.
  • '복제'를 클릭합니다.

이것은 Android 충돌 보고를 관리하기 위해 Cloudant 백엔드를 설정하는 방법을 보여줍니다.

따라서 보고서 저장을 위해 데이터베이스를 성공적으로 복제했습니다. 다음으로 데이터를 시각화할 수 있도록 Acralyzer CouchApp을 복제해야 합니다.

  • Cloudant 대시보드에서 '복제' 섹션을 선택합니다.
  • 원본 데이터베이스로 http://get.acralyzer.com/distrib-acralyzer를 URL로 사용하여 '원격 데이터베이스'를 선택합니다.
  • 대상 데이터베이스로 '새 데이터베이스'를 선택하고 이름을 "acralyzer"로 지정합니다.
  • '복제'를 클릭합니다.

이 단계는 Android 크래시 로그 데이터를 시각화하기 위해 acra 앱을 복제하는 것으로 구성됩니다.

참고 : acralyzer 앱 복제는 선택 사항입니다. 데이터를 시각화하는 대신 Android 충돌 보고서를 저장하는 데만 관심이 있는 경우에는 필요하지 않습니다(이 Android 자습서의 다음 섹션에서 acralyzer에 대해 자세히 살펴보겠습니다). JavaScript 기술에 자신이 있다면 자신만의 분석 앱을 작성할 수도 있습니다! 그러나 이는 이 블로그 게시물의 범위를 벗어납니다.

초기 설정 프로세스의 마지막 단계는 보안 권한을 추가하는 것입니다. Cloudant는 CouchDB에 대한 자체 보안 계층을 제공하여 개별 권한을 더 세밀하게 제어하므로 데이터베이스에 보고서를 작성하려면 쓰기 권한이 있는 사용자 계정을 만들어야 합니다.

  • Cloudant 대시보드에서 '데이터베이스' 섹션을 선택합니다.
  • acra-{myapp} 데이터베이스에 대한 권한 섹션(잠금 아이콘)을 클릭합니다.
  • 'API 키 생성'을 클릭합니다.
  • 생성된 사용자 이름과 암호를 기록해 둡니다(나중에 사용함).
  • 생성된 사용자 이름에 대한 쓰기 권한을 추가합니다.

나중에 Android 충돌 로그 및 보고서에 액세스할 수 있도록 보안 권한을 추가하세요.

Acralyzer로 Android 충돌 보고서 시각화

복제가 완료되면 https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard 를 따라 acralyzer 대시보드에 쉽게 액세스할 수 있습니다. 인정합니다. 가장 멋진 분석 도구는 아니지만 목적에 부합합니다.

상단 메뉴에서 시각화할 데이터베이스를 선택하고(단일 프로젝트에서 서로 다른 앱에 대해 여러 데이터베이스를 호스팅할 수 있으며 이는 사용 할당량에 영향을 미침) 기본 대시보드에서 데이터를 미리 볼 수 있습니다. 예를 들어 다음을 수행할 수 있습니다.

  • 시간 단위(시간, 일, 월 등)별로 보고서 수를 표시합니다.
  • Android 관련 측정항목(Android 버전, SDK 버전, 앱 버전, 기기 등)별로 보고서 배포를 봅니다.
  • 모든 충돌 보고서(자세한 스택 추적 포함)를 나열하거나 모든 버그를 봅니다(여기서 "버그"는 다른 사용자가 제공한 동일한 보고서 그룹입니다).
  • 단일 버그에 대한 세부 정보를 미리 보고 상태를 해결됨(수정된 경우)으로 설정합니다.
  • 오래되거나 사용되지 않는 항목을 제거합니다.

Android 충돌 로그 데이터를 시각화하면 앱을 보다 전략적으로 개선하는 데 매우 도움이 될 수 있습니다.

시각화에 사용할 수 있는 Android 충돌 측정항목은 앱에서 보내기로 선택한 보고서에 따라 다릅니다. ACRA는 다양한 보고서 필드를 제공하며 그 중 일부는 크기가 상당히 크거나 버그 수정과 완전히 관련이 없을 수 있습니다. 대부분의 프로젝트에서 필수 보고서 필드로 충분합니다. 여기에는 다음이 포함됩니다.

  • APP_VERSION_CODE
  • APP_VERSION_NAME
  • ANDROID_VERSION
  • 패키지_이름
  • REPORT_ID
  • 짓다
  • STACK_TRACE

Android 프로젝트에서 ACRA 구현

이 튜토리얼에서 이전에 언급했듯이 ACRA를 구현하는 것은 매우 쉽고 몇 가지 빠른 단계만 거치면 됩니다.

종속성 추가

먼저 다음 방법 중 하나로 라이브러리를 종속성으로 포함해야 합니다.

  • /libs 폴더에 .jar 파일로.
  • maven 종속성:

     <dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
  • Gradle 종속성:

     compile 'ch.acra:acra:XYZ'

애플리케이션 클래스 추가

다음으로, Android 애플리케이션 클래스를 프로젝트에 추가하고(또는 인스턴스가 하나만 있을 수 있으므로 기존 클래스를 업데이트해야 함) AndroidManifest.xml에 선언해야 합니다.

 <application android:name=".MyApp" android:theme="@style/AppTheme"> ...

그리고 거기에 ACRA를 설정하십시오.

 @ReportsCrashes( formUri = "https://{myusername}.cloudant.com/acra-{myapp}/_design/acra-storage/_update/report", reportType = HttpSender.Type.JSON, httpMethod = HttpSender.Method.POST, formUriBasicAuthLogin = "GENERATED_USERNAME_WITH_WRITE_PERMISSIONS", formUriBasicAuthPassword = "GENERATED_PASSWORD", formKey = "", // This is required for backward compatibility but not used customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PACKAGE_NAME, ReportField.REPORT_ID, ReportField.BUILD, ReportField.STACK_TRACE }, mode = ReportingInteractionMode.TOAST, resToastText = R.string.toast_crash ) public class MainApp extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }

그게 다야! 물론 모든 {myapp} 자리 표시자를 실제 값과 formUriBasicAuthLoginformUriBasicAuthPassword 값으로 바꿔야 합니다.

위의 코드 스니펫에서 볼 수 있듯이 필수 보고서 필드만 사용하고 있습니다. 귀하의 애플리케이션과 관련될 수 있는 다른 필드를 자유롭게 추가하십시오.

POST 대신 PUT을 사용하도록 선택할 수도 있습니다. 이 경우 REPORT_IDformer 의 끝에 매개변수로 추가됩니다.

마지막으로 Android 앱의 충돌을 사용자에게 알리는 방법을 선택할 수도 있습니다. 기본값은 자동 백그라운드 보고서입니다. 우리의 경우 충돌이 보고되었으며 버그 수정이 곧 제공될 것임을 사용자에게 알리는 토스트 메시지를 표시하도록 선택했습니다.

도움이 필요하다? 다음은 샘플 프로젝트입니다.

ACRA가 작동하는지 확인하기 위해 GitHub에 acra_example 리포지토리를 설정했습니다. 시작 시 ACRA를 초기화하고 버튼을 눌러 충돌을 일으킬 수 있는 간단한 앱이 특징입니다(그런 다음 null 포인터 예외가 트리거됨). 충돌 데이터는 여기에서 시각화할 수 있는 예제 Cloudant 데이터베이스로 전송됩니다.

데이터를 보려면 다음 자격 증명으로 로그인하십시오.

  • 사용자 이름: medo
  • 비밀번호: acraexample

ACRA의 대안

ACRA는 자동화된 Android 오류 보고를 위한 유일한 옵션이 아닙니다. 충돌은 반드시 발생하기 때문에 해결을 통해 수익을 창출하려는 대규모 B2D(Business-to-Developer) 시장이 있습니다.

예를 들어, Crittercism은 충돌 보고를 위한 매우 성숙한 플랫폼입니다. 보기에 좋고 데이터 분석을 위한 다양한 옵션을 제공하며 통합이 매우 쉽습니다. 유일한 단점: 가격과 무료 평가판은 활성 사용자 수, 데이터 보존 기간 및 지원 측면에서 상당히 제한적입니다. BugSense는 유사한 서비스입니다.

그러나 제 생각에는 Crashlytics가 더 나은 솔루션입니다. 최근까지 Crashlytics에는 프리미엄 모델(유료 프리미엄 등급 포함)이 있었습니다. 그러나 지금은(트위터가 인수한 후) 이전의 모든 프리미엄 기능을 무료로 사용할 수 있습니다. 사용 비용, 수수료 또는 제한이 없습니다. 이것은 사용하기 쉽고 강력한 분석 및 시각화 도구를 제공하기 때문에 많은 유명인사 및 고위 기업 및 개발자가 선호하는 오류 보고 수단입니다. 가장 인기 있는 IDE와도 플러그인(예: Eclipse, Android Studio)으로 통합되므로 앱에 Crashlytics를 추가하는 것은 프로젝트를 선택하고 버튼을 누르는 것만 큼 간단합니다. 또한 이러한 플러그인을 사용하면 브라우저를 열지 않고도 IDE에서 충돌 보고서를 추적할 수 있습니다.

그렇다면 훨씬 더 좋아 보이고 동일한 구현 노력에 대해 더 많은 기능을 제공하는 다른 대안이 있는데 ACRA를 사용하는 이유는 무엇입니까? 두 가지 이유를 말씀드리겠습니다.

  1. 이러한 다른 모든 옵션은 비공개 소스, 독점 소프트웨어 입니다. EULA로 가득 찬 바구니가 있어도 데이터가 어떻게 수집되고 처리되는지 정확히 확신할 수 없습니다. 반면 ACRA와 acralyzer는 GitHub에서 호스팅되는 오픈 소스 프로젝트로, 필요에 따라 쉽게 포크하고 조정할 수 있습니다.

  2. 데이터 이동성 . Cloudant가 만족스럽지 않다고 가정해 보겠습니다. 데이터를 다른 백엔드로 쉽게 복제하고 마이그레이션할 수 있습니다. 데이터 가 귀하 의 소유임을 보장합니다.

많은 선택과 마찬가지로 이것은 개인의 선호도와 친숙도에 달려 있습니다. 앱의 안정성을 높이는 데 사용할 수 있는 다양한 대안에 대한 자세한 내용은 이 Google+ 스레드를 확인하세요.

결론적으로

ACRA는 Cloudant 및 acralyzer와 함께 사용할 수 있는 매우 강력하고 사용자 정의가 가능한 라이브러리로, 최소한의 구현 노력으로 앱에 대한 무료 자동 충돌 보고 및 기본 분석을 달성할 수 있습니다.

신뢰할 수 있는 Android 코드를 작성하려면 많은 경험과 예측이 필요하지만 우리 중 누구도 진정으로 전지전능하지 않습니다. 예상치 못한 충돌 및 오류에 대비하고 예상치 못한 문제를 최대한 빨리 수정할 수 있도록 준비하십시오. 훌륭한 제품과 훌륭한 사용자 경험을 제공하는 작업입니다.

관련 항목: 수익성 있는 앱 만들기 - 모바일 분석 활용