Rapoarte automate de blocare Android cu ACRA și Cloudant
Publicat: 2022-03-11Crearea unei aplicații de bază pentru Android este ușor. Realizarea unei aplicații Android fiabile, scalabile și robuste, pe de altă parte, poate fi destul de dificilă.
Cu mii de dispozitive disponibile de la tone de producători diferiți, a presupune că o singură bucată de cod va funcționa fiabil pe telefoane este naiv în cel mai bun caz.
Segmentarea este cel mai mare compromis pentru a avea o platformă deschisă și plătim prețul în moneda de întreținere a codului, care continuă mult după ce o aplicație a trecut de etapa de producție.
De ce este importantă raportarea erorilor Android
Deci, ce se întâmplă atunci când o aplicație Android se blochează sau nu răspunde? Ei bine, apare caseta de dialog „Forțare închidere”, informând utilizatorul că ceva nu a mers prost. Dacă aplicația a fost descărcată prin Google Play, utilizatorului i se va solicita să raporteze blocarea trimițând un raport detaliat de blocare Android (inclusiv ora, modelul telefonului, versiunea Android, urmărirea stivei etc.) pe care tu (dezvoltatorul) îl poți vizualiza în Consola pentru dezvoltatori, permițându-vă să rezolvați eroarea vinovată.
Toate acestea sună foarte frumos, dar există o problemă majoră cu utilizarea raportării implicite a erorilor Android: utilizatorii tind să nu ia măsuri atunci când aplicațiile lor se blochează; de fapt, majoritatea aleg să nu trimită rapoarte de eroare Android. Atunci, cum poți, în calitate de dezvoltator conștiincios, să obții perspective fiabile despre blocările și defecțiunile aplicației tale?
Vă prezentăm ACRA
ACRA înseamnă „Automated Crash Reporting for Android”. Este o bibliotecă gratuită care vă permite să rezolvați problema „raportare manuală a erorilor” cu câteva linii de cod. Odată ce ați implementat biblioteca și totul a fost inițializat corect, veți putea extrage aceleași jurnale de eroare Android ca implicit Google (plus o mulțime de opțiuni de personalizare adăugate) automat și fără a solicita utilizatorului să ia măsuri.
În plus, ACRA vă permite să alegeți cum doriți să informați utilizatorul cu privire la o prăbușire Android, implicit fiind raportarea silențioasă în fundal și alternative, inclusiv dialoguri personalizate.
Până de curând, ACRA era susținută de Google Spreadsheet, ceea ce însemna că puteți primi toate rapoartele într-un singur fișier, găzduit gratuit în contul dvs. Google Drive. Din păcate, Google a solicitat să nu mai folosim această opțiune în viitor, așa că ne-au rămas câteva alternative pentru trimiterea datelor din raportul de blocare, dintre care unele le vom acoperi în acest tutorial:
- E-mail standard (încă necesită interacțiunea utilizatorului).
- Client de e-mail/HTTP personalizat (necesită o configurare extinsă).
- Back-end personalizat (cu opțiuni variind de la soluții gratuite la cele comerciale).
În acest articol, vom analiza una dintre aceste soluții: găzduirea rapoartelor ACRA pe un back-end Cloudant și vizualizarea datelor cu acralyzer.
Configurarea unui back-end Cloudant
Primul lucru pe care trebuie să-l facem este să înregistrăm un cont Cloudant. Desigur, există o captură: serviciile Cloudant nu sunt în întregime gratuite, dar, conform paginii lor de prețuri, este foarte puțin probabil să depășiți limita lunară de 5 USD (cu excepția cazului în care aveți o bază uriașă de utilizatori și o mulțime de erori în codul dvs.).
Odată ce ne-am înregistrat, trebuie să înțelegem cum funcționează lucrurile. La un nivel înalt, back-end-ul nostru va consta din două componente:
- O bază de date de stocare sau, mai precis, o Apache CouchDB. CouchDB își stochează datele în format JSON, ceea ce înseamnă că toate rapoartele trimise de pe dispozitivul Android trebuie să se potrivească cu formatul pentru a fi inserate ca intrare. O inserare de bază de date este o simplă solicitare HTTP POST sau PUT.
- O aplicație web (pentru analiză) sau, mai precis, o CouchApp. Aceasta este o aplicație JavaScript simplă care vă permite să executați interogări și să afișați datele stocate în instanța CouchDB.
Pentru ca back-end-ul nostru să funcționeze corect, va trebui să setăm aceste două componente. În teorie, am putea construi baza de date și aplicația de la sursă și apoi să folosim un instrument pentru a le implementa în back-end - dar oamenii buni de la ACRA au făcut deja asta pentru noi. Deci, cea mai ușoară abordare este replicarea unei baze de date la distanță și a unei aplicații la distanță.
Să mergem mai departe și să replicăm un ACRA CouchDB gol:
- Selectați secțiunea „Replicare” din tabloul de bord Cloudant.
- Ca bază de date sursă, selectați „Bază de date de la distanță” cu http://get.acralyzer.com/distrib-acra-storage ca adresă URL.
- Ca bază de date țintă, selectați „Bază de date nouă” și denumiți-o „acra-{myapp}” (fără ghilimele). Rețineți că parametrul {myapp} ar trebui să fie unic pentru aplicația dvs. și că numele bazei de date trebuie să înceapă cu „acra-“.
- Faceți clic pe „Replicare”.
Astfel, am replicat cu succes baza de date pentru stocarea rapoartelor. Apoi, trebuie să replicăm acralyzer CouchApp, astfel încât să putem vizualiza datele:
- Selectați secțiunea „Replicare” din tabloul de bord Cloudant.
- Ca bază de date sursă, selectați „Bază de date la distanță” cu http://get.acralyzer.com/distrib-acralyzer ca adresă URL.
- Ca bază de date țintă, selectați „Bază de date nouă” și denumiți-o „acralyzer”.
- Faceți clic pe „Replicare”.
Notă : replicarea aplicației acralyzer este opțională. Nu veți avea nevoie de el dacă sunteți interesat doar să stocați raportul de blocare Android, mai degrabă decât să vizualizați datele (vom arunca o privire mai atentă la acralyzer în următoarea secțiune a acestui tutorial Android). Dacă te simți suficient de încrezător în abilitățile tale JavaScript, ai putea chiar să scrii propria ta aplicație de analiză! Dar asta nu face obiectul acestei postări pe blog.
Ultimul pas al procesului de configurare inițială este adăugarea permisiunilor de securitate. Cloudant oferă propriul său strat de securitate peste CouchDB cu un control mai fin asupra drepturilor individuale, așa că pentru a scrie un raport în baza noastră de date trebuie să creăm un cont de utilizator cu permisiuni de scriere:
- Selectați secțiunea „Bază de date” din tabloul de bord Cloudant.
- Faceți clic pe secțiunea de permisiuni (pictograma de blocare) pentru baza de date acra-{myapp}.
- Faceți clic pe „Generați chei API”.
- Notați numele de utilizator și parola generate (le vom folosi mai târziu).
- Adăugați permisiuni de scriere pentru numele de utilizator generat.
Vizualizarea rapoartelor de blocare Android cu acralyzer
Odată replicat, tabloul de bord acralyzer poate fi accesat cu ușurință urmând https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard
. Recunosc: nu este cel mai frumos instrument de analiză de acolo, dar își servește scopul.
Din meniul de sus, puteți selecta ce bază de date doriți să vizualizați (este posibil să găzduiți mai multe baze de date pentru diferite aplicații într-un singur proiect; acest lucru vă va afecta cota de utilizare) și să previzualizați datele în tabloul de bord principal. De exemplu, puteți:

- Trasează numărul de rapoarte în funcție de unitatea de timp (oră, zi, lună etc.).
- Vizualizați distribuția rapoartelor în funcție de valorile specifice Android (versiunea Android, versiunea SDK, versiunea aplicației, dispozitivul etc.).
- Listați toate rapoartele de blocare (cu o urmă detaliată a stivei) sau vizualizați toate erorile (aici, o „bug” este un grup de rapoarte identice provenite de la diferiți utilizatori).
- Previzualizează detaliile pentru o singură eroare și setează-i starea ca rezolvată (dacă a fost remediată).
- Ștergeți intrările vechi sau învechite.
Rețineți că valorile de blocare Android disponibile pentru vizualizare vor depinde de rapoartele pe care alegem să le trimitem din aplicația noastră. ACRA oferă o varietate de câmpuri de raportare, dintre care unele pot fi destul de mari ca dimensiuni sau nu pot fi complet relevante pentru remedierea erorilor. Pentru majoritatea proiectelor, câmpurile de raport necesare vor fi suficiente. Acestea includ:
- APP_VERSION_CODE
- APP_VERSION_NAME
- ANDROID_VERSION
- NUMELE PACHETULUI
- REPORT_ID
- CONSTRUI
- STACK_TRACE
Implementarea ACRA în proiectul dvs. Android
După cum sa menționat anterior în acest tutorial, implementarea ACRA este foarte ușoară și necesită doar câțiva pași rapizi.
Adăugați dependență
În primul rând, trebuie să includem biblioteca ca dependență într-unul dintre următoarele moduri:
- Ca fișier .jar în folderul dumneavoastră /libs.
Ca dependență de expert:
<dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
Ca dependență de gradle:
compile 'ch.acra:acra:XYZ'
Adăugați clasa de aplicație
Apoi, trebuie să adăugăm o clasă de aplicație Android la proiectul nostru (sau să actualizăm o clasă existentă, deoarece poate exista o singură instanță) și să o declarăm în AndroidManifest.xml:
<application android:name=".MyApp" android:theme="@style/AppTheme"> ...
Și configurați ACRA acolo:
@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); } }
Asta e! Desigur, va trebui să înlocuiți toți substituenții {myapp} cu valori reale, precum și cu valori pentru formUriBasicAuthLogin
și formUriBasicAuthPassword
.
După cum puteți vedea din fragmentul de cod de mai sus, folosim doar câmpurile de raport obligatorii. Simțiți-vă liber să adăugați orice alte câmpuri care ar putea fi relevante pentru aplicația dvs.
De asemenea, puteți alege să utilizați PUT în loc de POST. În acest caz, REPORT_ID
va fi adăugat la sfârșitul celui former
ca parametru.
În cele din urmă, puteți alege și modul în care utilizatorul este informat despre blocarea aplicației Android, implicit fiind un raport de fundal silențios. În cazul nostru, alegem să afișăm un mesaj Toast care informează utilizatorul că accidentul a fost raportat și o remediere a erorilor ar trebui să fie disponibilă în curând.
Nevoie de ajutor? Iată un exemplu de proiect
Pentru a vedea ACRA în acțiune, am configurat depozitul acra_example pe GitHub. Dispune de o aplicație simplă care inițializează ACRA la pornire și vă permite să o blocați apăsând un buton (care declanșează apoi o excepție de indicator nul). Datele de blocare sunt trimise la un exemplu de bază de date Cloudant care poate fi vizualizată aici.
Pentru a vizualiza datele, conectați-vă cu următoarele acreditări:
- Nume utilizator: medo
- Parola: acraexample
Alternative la ACRA
ACRA nu este singura opțiune pentru raportarea automată a erorilor Android. Deoarece blochările vor avea loc, există o mare piață de la business-to-developer (B2D) care încearcă să monetizeze rezoluția lor.
Crittercismul, de exemplu, este o platformă foarte matură pentru raportarea accidentelor. Arată grozav, oferă o mulțime de opțiuni pentru analiza datelor și este foarte ușor de integrat. Singurul dezavantaj: prețul și perioada de încercare gratuită este destul de limitată în ceea ce privește numărul de utilizatori activi, zilele de păstrare a datelor și suport). BugSense este un serviciu similar.
În opinia mea, însă, Crashlytics este o soluție superioară. Până de curând, Crashlytics avea un model freemium (cu un nivel premium plătit); dar acum (după achiziționarea lor de către Twitter), toate funcțiile anterior premium sunt disponibile gratuit. Nu există costuri de utilizare, taxe sau limite. Acesta este mijlocul preferat de raportare a erorilor pentru o mulțime de companii și dezvoltatori de profil înalt și de rang înalt, deoarece este foarte ușor de utilizat și oferă instrumente puternice de analiză și vizualizare. Se integrează chiar și cu cele mai populare IDE-uri ca plugin (de exemplu, Eclipse, Android Studio), așa că adăugarea Crashlytics la aplicația dvs. este la fel de simplă ca selectarea unui proiect și apăsarea unui buton. Aceste plugin-uri vă permit, de asemenea, să urmăriți rapoartele de blocare din IDE-ul dvs. fără a fi nevoie să deschideți un browser.
Deci, de ce să folosiți ACRA atunci când există alte alternative care arată mult mai bine și oferă mai multe caracteristici pentru același efort de implementare? Vă dau două motive.
Toate aceste alte opțiuni sunt software cu sursă închisă, proprietar . Chiar și cu un coș plin de EULA, nu puteți fi sigur exact cum sunt colectate și gestionate datele dvs. Pe de altă parte, ACRA și acralyzer sunt proiecte open source găzduite pe GitHub pe care le puteți bifurca și adapta cu ușurință nevoilor dvs.
Mobilitatea datelor . Să presupunem că nu ești mulțumit de Cloudant. Este ușor să replicați și să migrați datele dvs. către un alt back-end. Ai garanția că datele rămân ale tale .
Ca și în cazul multor opțiuni, aceasta se rezumă la preferințele personale și familiaritatea. Consultați acest fir Google+ pentru mai multe discuții despre diferitele alternative disponibile pentru a face aplicația dvs. mai fiabilă.
În concluzie
ACRA este o bibliotecă extrem de robustă și personalizabilă, care poate fi utilizată împreună cu Cloudant și acralyzer pentru a obține raportare automată gratuită a erorilor și analize de bază pentru aplicația dvs., toate pentru un efort minim de implementare.
Scrierea unui cod Android de încredere necesită multă experiență și previziune, dar niciunul dintre noi nu este cu adevărat omniscient. Fiți pregătit pentru blocările și erorile neașteptate și fiți gata să remediați neașteptele cât mai curând posibil. Acesta este genul de muncă care implică produse grozave și experiențe excelente pentru utilizatori.