Rapports de plantage Android automatisés avec ACRA et Cloudant

Publié: 2022-03-11

Créer une application Android de base est facile. Créer une application Android fiable, évolutive et robuste, en revanche, peut être assez difficile.

Avec des milliers d'appareils disponibles provenant de tonnes de fabricants différents, supposer qu'un seul morceau de code fonctionnera de manière fiable sur tous les téléphones est au mieux naïf.

La segmentation est le plus grand compromis pour avoir une plate-forme ouverte, et nous en payons le prix dans la devise de la maintenance du code, qui se poursuit longtemps après qu'une application a passé l'étape de production.

Pourquoi le rapport d'erreur Android est important

Alors, que se passe-t-il lorsqu'une application Android plante ou ne répond plus ? Eh bien, la boîte de dialogue "Forcer la fermeture" apparaît, informant l'utilisateur que quelque chose ne va pas. Si l'application a été téléchargée via Google Play, l'utilisateur sera invité à signaler le plantage en envoyant un rapport de plantage Android détaillé (y compris l'heure, le modèle de téléphone, la version d'Android, la trace de la pile, etc.) que vous (le développeur) pouvez afficher dans la console du développeur, vous permettant de corriger le bogue coupable.

Tout cela semble très bien, mais il y a un problème majeur avec le rapport d'erreurs par défaut d'Android : les utilisateurs ont tendance à ne pas l'utiliser, laissant les développeurs ignorants de l'état de leurs applications.

Tout cela semble très bien, mais il y a un problème majeur avec l'utilisation du rapport d'erreurs par défaut d'Android : les utilisateurs ont tendance à ne pas agir lorsque leurs applications plantent ; en fait, la majorité choisit de ne pas envoyer de rapports d'erreur Android. Comment pouvez-vous, en tant que développeur consciencieux, obtenir des informations fiables sur les plantages et les défaillances de votre application ?

Un journal de plantage Android fiable est particulièrement important lorsque les utilisateurs n'envoient pas de rapports de plantage.

Présentation de l'ACRA

ACRA est l'abréviation de "Automated Crash Reporting for Android". C'est une bibliothèque gratuite qui vous permet de résoudre le problème du "rapport d'erreurs manuel" avec quelques lignes de code. Une fois que vous avez implémenté la bibliothèque et que tout a été correctement initialisé, vous pourrez extraire automatiquement les mêmes journaux d'erreurs Android que ceux par défaut de Google (plus un tas d'options de personnalisation supplémentaires) et sans que l'utilisateur n'ait à intervenir.

Au-delà de cela, ACRA vous permet de choisir la manière dont vous souhaitez informer l'utilisateur d'un plantage d'Android, la valeur par défaut étant un rapport d'arrière-plan silencieux et des alternatives, notamment des boîtes de dialogue personnalisées.

Jusqu'à récemment, ACRA était soutenu par Google Spreadsheet, ce qui signifiait que vous pouviez recevoir tous vos rapports dans un seul fichier, hébergé gratuitement sur votre compte Google Drive. Malheureusement, Google nous a demandé de ne plus utiliser cette option à l'avenir, il nous reste donc quelques alternatives pour envoyer les données du rapport d'incident, dont certaines seront abordées dans ce didacticiel :

  • E-mail standard (nécessite toujours une interaction de l'utilisateur).
  • Client de messagerie/HTTP personnalisé (nécessite une configuration approfondie).
  • Back-end personnalisé (avec des options allant des solutions gratuites aux solutions commerciales).

Dans cet article, nous allons analyser l'une de ces solutions : héberger vos rapports ACRA sur un back-end Cloudant et visualiser les données avec acralyzer.

Configurer un back-end Cloudant

La première chose que nous devons faire est de créer un compte Cloudant. Bien sûr, il y a un hic : les services de Cloudant ne sont pas entièrement gratuits, mais selon leur page de tarification, il est très peu probable que vous dépassiez la limite mensuelle de 5 $ (sauf si vous avez une énorme base d'utilisateurs et une tonne de bogues dans votre code).

Une fois que nous nous sommes inscrits, nous devons comprendre comment les choses fonctionnent. À un niveau élevé, notre back-end se composera de deux composants :

  1. Une base de données de stockage ou, pour être plus précis, une Apache CouchDB. CouchDB stocke ses données au format JSON, ce qui signifie que tous les rapports envoyés depuis l'appareil Android doivent correspondre au format afin d'être insérés en tant qu'entrée. Une insertion de base de données est une simple requête HTTP POST ou PUT.
  2. Une application web (pour l'analyse) ou, pour être plus précis, une CouchApp. Il s'agit d'une simple application JavaScript qui vous permet d'exécuter des requêtes et d'afficher les données stockées dans l'instance CouchDB.

Pour que notre back-end fonctionne correctement, nous devons configurer ces deux composants. En théorie, nous pourrions créer la base de données et l'application à partir de la source, puis utiliser un outil pour les déployer sur notre back-end, mais les bonnes personnes d'ACRA l'ont déjà fait pour nous. L'approche la plus simple consiste donc à répliquer une base de données distante et une application distante.

Allons-y et reproduisons un ACRA CouchDB vide :

  • Sélectionnez la section « Réplication » dans votre tableau de bord Cloudant.
  • En tant que base de données source, sélectionnez "Base de données distante" avec http://get.acralyzer.com/distrib-acra-storage comme URL.
  • En tant que base de données cible, sélectionnez "Nouvelle base de données" et nommez-la "acra-{myapp}" (sans les guillemets). Notez que le paramètre {myapp} doit être unique pour votre application et que le nom de la base de données doit commencer par "acra-".
  • Cliquez sur "Répliquer".

Ceci illustre comment configurer un back-end Cloudant pour gérer les rapports de plantage Android.

Ainsi, nous avons répliqué avec succès la base de données pour le stockage des rapports. Ensuite, nous devons répliquer l'acralyzer CouchApp afin de pouvoir visualiser les données :

  • Sélectionnez la section « Réplication » dans votre tableau de bord Cloudant.
  • En tant que base de données source, sélectionnez "Base de données distante" avec http://get.acralyzer.com/distrib-acralyzer comme URL.
  • En tant que base de données cible, sélectionnez "Nouvelle base de données" et nommez-la "acralyzer".
  • Cliquez sur "Répliquer".

Cette étape consiste à répliquer l'application acra pour visualiser les données du journal de plantage Android.

Remarque : la réplication de l'application acralyzer est facultative. Vous n'en aurez pas besoin si vous souhaitez uniquement stocker votre rapport de plantage Android, plutôt que de visualiser les données (nous examinerons de plus près acralyzer dans la prochaine section de ce didacticiel Android). Si vous vous sentez suffisamment à l'aise avec vos compétences en JavaScript, vous pouvez même écrire votre propre application d'analyse ! Mais cela sort du cadre de cet article de blog.

La dernière étape du processus de configuration initiale consiste à ajouter des autorisations de sécurité. Cloudant fournit sa propre couche de sécurité sur CouchDB avec un contrôle plus fin des droits individuels, donc pour écrire un rapport dans notre base de données, nous devons créer un compte utilisateur avec des autorisations d'écriture :

  • Sélectionnez la section « Base de données » dans votre tableau de bord Cloudant.
  • Cliquez sur la section des autorisations (icône de verrouillage) pour la base de données acra-{myapp}.
  • Cliquez sur "Générer des clés API".
  • Notez le nom d'utilisateur et le mot de passe générés (nous les utiliserons plus tard).
  • Ajoutez des autorisations d'écriture pour le nom d'utilisateur généré.

Ajoutez des autorisations de sécurité afin que vos journaux et rapports de plantage Android soient accessibles ultérieurement.

Visualiser les rapports de plantage Android avec acralyzer

Une fois répliqué, le tableau de bord acralyzer est facilement accessible en suivant https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard . Je l'admets : ce n'est pas le plus bel outil d'analyse disponible, mais il remplit sa fonction.

Dans le menu du haut, vous pouvez sélectionner la base de données que vous souhaitez visualiser (il est possible d'héberger plusieurs bases de données pour différentes applications dans un même projet ; cela affectera votre quota d'utilisation) et prévisualiser les données dans le tableau de bord principal. Par exemple, vous pouvez :

  • Tracez le nombre de rapports par unité de temps (heure, jour, mois, etc.).
  • Affichez la répartition des rapports par métrique spécifique à Android (version Android, version SDK, version de l'application, appareil, etc.).
  • Répertorier tous les rapports de plantage (avec une trace détaillée de la pile) ou afficher tous les bogues (ici, un « bogue » est un groupe de rapports identiques provenant de différents utilisateurs).
  • Prévisualisez les détails d'un seul bogue et définissez son statut comme résolu (si corrigé).
  • Purger les entrées anciennes ou obsolètes.

La visualisation des données du journal des plantages Android peut être très utile pour améliorer votre application de manière plus stratégique.

Notez que les métriques de crash Android disponibles pour la visualisation dépendront des rapports que nous choisissons d'envoyer depuis notre application. ACRA propose une variété de champs de rapport, dont certains peuvent être assez volumineux ou ne pas être complètement pertinents pour la correction de bogues. Pour la plupart des projets, les champs de rapport requis seront suffisants. Ceux-ci inclus:

  • APP_VERSION_CODE
  • APP_VERSION_NAME
  • ANDROID_VERSION
  • NOM DU PAQUET
  • REPORT_ID
  • CONSTRUIRE
  • TRACE DE LA PILE

Implémenter ACRA dans votre projet Android

Comme mentionné précédemment dans ce didacticiel, la mise en œuvre d'ACRA est très simple et ne nécessite que quelques étapes rapides.

Ajouter une dépendance

Tout d'abord, nous devons inclure la bibliothèque en tant que dépendance de l'une des manières suivantes :

  • En tant que fichier .jar dans votre dossier /libs.
  • En tant que dépendance maven :

     <dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
  • En tant que dépendance de niveau :

     compile 'ch.acra:acra:XYZ'

Ajouter une classe d'application

Ensuite, nous devons ajouter une classe Application Android à notre projet (ou mettre à jour une classe existante, car il ne peut y avoir qu'une seule instance) et la déclarer dans le AndroidManifest.xml :

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

Et configurez ACRA ici :

 @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); } }

C'est ça! Bien sûr, vous devrez remplacer tous les espaces réservés {myapp} par des valeurs réelles, ainsi que des valeurs pour formUriBasicAuthLogin et formUriBasicAuthPassword .

Comme vous pouvez le voir dans l'extrait de code ci-dessus, nous n'utilisons que les champs de rapport obligatoires. N'hésitez pas à ajouter d'autres champs qui pourraient être pertinents pour votre candidature.

Vous pouvez également choisir d'utiliser PUT au lieu de POST. Dans ce cas, le REPORT_ID sera ajouté à la fin du former en tant que paramètre.

Enfin, vous pouvez également choisir comment l'utilisateur est informé du plantage de l'application Android, la valeur par défaut étant un rapport d'arrière-plan silencieux. Dans notre cas, nous choisissons d'afficher un message Toast informant l'utilisateur que le plantage a été signalé et qu'un correctif de bogue devrait bientôt être disponible.

Besoin d'aide? Voici un exemple de projet

Pour voir ACRA en action, j'ai configuré le référentiel acra_example sur GitHub. Il comporte une application simple qui initialise ACRA au démarrage et vous permet de le planter en appuyant sur un bouton (ce qui déclenche alors une exception de pointeur nul). Les données de plantage sont envoyées à un exemple de base de données Cloudant qui peut être visualisé ici.

Pour afficher les données, connectez-vous avec les identifiants suivants :

  • Nom d'utilisateur : medo
  • Mot de passe : acraexample

Alternatives à l'ACRA

ACRA n'est pas la seule option pour le rapport d'erreurs Android automatisé. Étant donné que les plantages sont inévitables, il existe un grand marché entreprise-développeur (B2D) qui tente de monétiser leur résolution.

Crittercism, par exemple, est une plate-forme très mature pour les rapports de crash. Il a fière allure, offre un tas d'options pour l'analyse des données et est très facile à intégrer. Seul bémol : le prix, et l'essai gratuit est assez limité en termes de nombre d'utilisateurs actifs, de jours de conservation des données et de support). BugSense est un service similaire.

À mon avis, cependant, Crashlytics est une solution supérieure. Jusqu'à récemment, Crashlytics avait un modèle freemium (avec un niveau premium payant) ; mais maintenant (après leur acquisition par Twitter), toutes les fonctionnalités autrefois premium sont disponibles gratuitement. Il n'y a pas de frais d'utilisation, de frais ou de limites. C'est le moyen de rapport d'erreur préféré pour de nombreuses entreprises et développeurs de haut niveau et de haut niveau, car il est très facile à utiliser et offre de puissants outils d'analyse et de visualisation. Il s'intègre même aux IDE les plus populaires en tant que plug-in (par exemple, Eclipse, Android Studio). Ainsi, l'ajout de Crashlytics à votre application est aussi simple que de sélectionner un projet et d'appuyer sur un bouton. Ces plugins vous permettent également de suivre les rapports de plantage de votre IDE sans avoir à ouvrir un navigateur.

Alors, pourquoi utiliser ACRA alors qu'il existe d'autres alternatives qui semblent bien meilleures et offrent plus de fonctionnalités pour le même effort de mise en œuvre ? Je vais vous donner deux raisons.

  1. Toutes ces autres options sont des logiciels propriétaires à code source fermé . Même avec un panier rempli de CLUF, vous ne pouvez pas savoir exactement comment vos données sont collectées et traitées. D'autre part, ACRA et acralyzer sont des projets open source hébergés sur GitHub que vous pouvez facilement bifurquer et adapter à vos besoins.

  2. Mobilité des données . Disons que vous n'êtes pas satisfait de Cloudant. C'est un jeu d'enfant de répliquer et de migrer vos données vers un autre back-end. Vous avez la garantie que les données restent vôtres .

Comme pour de nombreux choix, celui-ci se résume à vos préférences personnelles et à votre familiarité. Consultez ce fil Google+ pour en savoir plus sur les différentes alternatives disponibles pour rendre votre application plus fiable.

En conclusion

ACRA est une bibliothèque hautement robuste et hautement personnalisable qui peut être utilisée avec Cloudant et acralyzer pour obtenir des rapports d'incidents gratuits et automatisés et des analyses de base pour votre application, le tout pour un effort de mise en œuvre minimal.

L'écriture de code Android fiable nécessite beaucoup d'expérience et de prévoyance, mais aucun d'entre nous n'est vraiment omniscient. Soyez prêt pour les plantages et les erreurs inattendus, et soyez prêt à corriger l'inattendu dès que possible. C'est le genre de travail qui entre dans la création de produits de qualité et d'expériences utilisateur exceptionnelles.

En relation : Rendez votre application rentable : tirez parti de l'analyse mobile