ACRA La chasse aux bugs est ouverte ! @KevinGaudin  - 14 avril 2011
Au programme J'ai fini mon appli ! Et maintenant ? ACRA, c'est quoi ? Ajouter ACRA c'est simple ! Détail des fonctionnalités Et pour (très) bientôt... Quand utiliser ACRA ? Et après ?      + Vos questions !
J'ai fini mon appli ! Et maintenant ?   1/2 Grand Public Hop ! Sur le market ! Entreprise Hop ! J'envoie aux utilisateurs ! Et... bah j'attends un retour... Quand un jour:
J'ai fini mon appli ! Et maintenant ?   2/2 Grand Public Pas de réponse possible aux commentaires L'Android Market propose des rapports... seulement pour certains terminaux à partir de 2.1 très peu de détails sur le contexte Entreprise Demander aux utilisateurs une méthode pour reproduire l'erreur Pour les plus geeks d'entre eux... leur faire installer un collecteur de logs (ex: ALogCat) et envoyer les traces d'exécution  Ou alors... Développer un UncaughtExceptionHandler + script serveur pour recevoir des rapports Il existe des exemples sur StackOverflow .
ACRA, c'est quoi ? Un UncaughtExceptionHandler... ... qui envoie ses rapports vers un Formulaire GoogleDoc ! FACILE à mettre en oeuvre et TRES configurable Un projet open source (ASL2), hébergé sur GoogleCode =>  http://acra.googlecode.com Première version en avril 2010 Version stable courante : 3.1.1 Téléchargements > 10/j 1 développeur principal + quelques contributions ponctuelles
Ajouter ACRA, c'est simple ! importer un csv dans GoogleDoc et lui associer un formulaire ajouter le .jar d'acra dans le projet ajouter une annotation dans une classe héritant d'Application + un appel à ACRA.init(this) import  org . acra .*; import  org . acra . annotation .*; @ReportsCrashes ( formKey  =   "dGVacG0ydVHnaNHjRjVTUTEtb3FPWG" )   public   class   MyApplication   extends   Application   {      @Override      public   void  onCreate ()   {          ACRA . init ( this );          super . onCreate ();      } } Demo 4.   Manifest: déclarer la classe application + permission internet
Détail des fonctionnalités 1/3 3 modes d'interaction: SILENT : invisible TOAST : message "discret" NOTIFICATION : notification + dialog @ReportsCrashes ( formKey = "dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ" ,     mode  =   ReportingInteractionMode . NOTIFICATION ,     resNotifTickerText  =  R . string . crash_notif_ticker_text ,     resNotifTitle  =  R . string . crash_notif_title ,     resNotifText  =  R . string . crash_notif_text ,     resNotifIcon  =  android . R . drawable . stat_notify_error ,   // optional     resDialogText  =  R . string . crash_dialog_text ,     resDialogIcon  =  android . R . drawable . ic_dialog_info ,   //optional     resDialogTitle  =  R . string . crash_dialog_title ,   // optional     resDialogCommentPrompt  =  R . string . crash_dialog_comment_prompt , //optional     resDialogOkToast  =  R . string . crash_dialog_ok_toast  // optional      )
Détail des fonctionnalités 2/3  Envoi des rapports vers votre propre script serveur (http/https) Ajout de traces spécifiques ErrorReporter.getInstance().putCustomData("myVariable", myVariable); SharedPreferences pour activer/désactiver ACRA Envoi de rapports "manuels" ErrorReporter.getInstance().handleException(caughtException); Envoi de rapports discrets ErrorReporter.getInstance().handleSilentException(caughtException);
Détail des fonctionnalités 3/3 Les limites: Ne gère que les exceptions, pas les ANR Limite de capacité des Google Spreadsheets: 400 000 cells = + de 14 000 rapports Incapacité à fournir un CrashDialog direct
Et pour (très) bientôt... Envoi vers script perso: Noms de paramètres plus clairs Support Authentification HTTP Basic  Envoi par e-mail (via intent): Permet de se débarrasser de la permission internet Contenu du rapport paramétrable  API pour coder votre propre ReportSender Encore plus de données envoyées Logcat (normal, events, radio) MemInfo, SystemAvailableFeatures, PackageStats, Environment, DropBoxManager, Settings Adresse e-mail de l'utilisateur (saisie via dialog ou SharedPreference) Unique Id Intégration Maven  (merci Pierre-Yves !)
Quand utiliser ACRA ? En Dev... pas forcément utile En recette/beta : permet de récupérer TOUTES les traces des crashs constatés par les recetteurs/testeurs En production : être informé au plus tôt des bugs et défauts de compatibilité sauf si application TRES populaire ?
Et après ? Focus sur l'exploitation des rapports. Quelques idées : Analyses via Google Visualization API (voir  premiers travaux par Jan Berkel ) Aide au diagnostic (meilleure visualisation des rapports, lien direct vers le code, regroupement de rapports similaires...) Intégration bugtrackers ...
Liens Projet (downloads, wiki, source, issues...) :  http://acra.googlecode.com Forum :  http://groups.google.com/group/acra-discuss Twitter : @kevingaudin @CrashReports
Merci ! Emmanuel Astier - UncaughtExceptionHandler initial http://androidblogger.blogspot.com/ Pierre-Yves Ricau  - Mavenizator Jan Berkel  - Analyses via GVT PAUG VOUS !

ACRA - Présentation PAUG Avril 2011

  • 1.
    ACRA La chasseaux bugs est ouverte ! @KevinGaudin - 14 avril 2011
  • 2.
    Au programme J'aifini mon appli ! Et maintenant ? ACRA, c'est quoi ? Ajouter ACRA c'est simple ! Détail des fonctionnalités Et pour (très) bientôt... Quand utiliser ACRA ? Et après ?      + Vos questions !
  • 3.
    J'ai fini monappli ! Et maintenant ?   1/2 Grand Public Hop ! Sur le market ! Entreprise Hop ! J'envoie aux utilisateurs ! Et... bah j'attends un retour... Quand un jour:
  • 4.
    J'ai fini monappli ! Et maintenant ?   2/2 Grand Public Pas de réponse possible aux commentaires L'Android Market propose des rapports... seulement pour certains terminaux à partir de 2.1 très peu de détails sur le contexte Entreprise Demander aux utilisateurs une méthode pour reproduire l'erreur Pour les plus geeks d'entre eux... leur faire installer un collecteur de logs (ex: ALogCat) et envoyer les traces d'exécution  Ou alors... Développer un UncaughtExceptionHandler + script serveur pour recevoir des rapports Il existe des exemples sur StackOverflow .
  • 5.
    ACRA, c'est quoi? Un UncaughtExceptionHandler... ... qui envoie ses rapports vers un Formulaire GoogleDoc ! FACILE à mettre en oeuvre et TRES configurable Un projet open source (ASL2), hébergé sur GoogleCode => http://acra.googlecode.com Première version en avril 2010 Version stable courante : 3.1.1 Téléchargements > 10/j 1 développeur principal + quelques contributions ponctuelles
  • 6.
    Ajouter ACRA, c'estsimple ! importer un csv dans GoogleDoc et lui associer un formulaire ajouter le .jar d'acra dans le projet ajouter une annotation dans une classe héritant d'Application + un appel à ACRA.init(this) import org . acra .*; import org . acra . annotation .*; @ReportsCrashes ( formKey = "dGVacG0ydVHnaNHjRjVTUTEtb3FPWG" ) public class MyApplication extends Application {      @Override      public void onCreate () {         ACRA . init ( this );         super . onCreate ();     } } Demo 4.   Manifest: déclarer la classe application + permission internet
  • 7.
    Détail des fonctionnalités1/3 3 modes d'interaction: SILENT : invisible TOAST : message "discret" NOTIFICATION : notification + dialog @ReportsCrashes ( formKey = "dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ" ,     mode = ReportingInteractionMode . NOTIFICATION ,     resNotifTickerText = R . string . crash_notif_ticker_text ,     resNotifTitle = R . string . crash_notif_title ,     resNotifText = R . string . crash_notif_text ,     resNotifIcon = android . R . drawable . stat_notify_error , // optional     resDialogText = R . string . crash_dialog_text ,     resDialogIcon = android . R . drawable . ic_dialog_info , //optional     resDialogTitle = R . string . crash_dialog_title , // optional     resDialogCommentPrompt = R . string . crash_dialog_comment_prompt , //optional     resDialogOkToast = R . string . crash_dialog_ok_toast // optional     )
  • 8.
    Détail des fonctionnalités2/3  Envoi des rapports vers votre propre script serveur (http/https) Ajout de traces spécifiques ErrorReporter.getInstance().putCustomData("myVariable", myVariable); SharedPreferences pour activer/désactiver ACRA Envoi de rapports "manuels" ErrorReporter.getInstance().handleException(caughtException); Envoi de rapports discrets ErrorReporter.getInstance().handleSilentException(caughtException);
  • 9.
    Détail des fonctionnalités3/3 Les limites: Ne gère que les exceptions, pas les ANR Limite de capacité des Google Spreadsheets: 400 000 cells = + de 14 000 rapports Incapacité à fournir un CrashDialog direct
  • 10.
    Et pour (très)bientôt... Envoi vers script perso: Noms de paramètres plus clairs Support Authentification HTTP Basic  Envoi par e-mail (via intent): Permet de se débarrasser de la permission internet Contenu du rapport paramétrable  API pour coder votre propre ReportSender Encore plus de données envoyées Logcat (normal, events, radio) MemInfo, SystemAvailableFeatures, PackageStats, Environment, DropBoxManager, Settings Adresse e-mail de l'utilisateur (saisie via dialog ou SharedPreference) Unique Id Intégration Maven (merci Pierre-Yves !)
  • 11.
    Quand utiliser ACRA? En Dev... pas forcément utile En recette/beta : permet de récupérer TOUTES les traces des crashs constatés par les recetteurs/testeurs En production : être informé au plus tôt des bugs et défauts de compatibilité sauf si application TRES populaire ?
  • 12.
    Et après ?Focus sur l'exploitation des rapports. Quelques idées : Analyses via Google Visualization API (voir premiers travaux par Jan Berkel ) Aide au diagnostic (meilleure visualisation des rapports, lien direct vers le code, regroupement de rapports similaires...) Intégration bugtrackers ...
  • 13.
    Liens Projet (downloads,wiki, source, issues...) : http://acra.googlecode.com Forum :  http://groups.google.com/group/acra-discuss Twitter : @kevingaudin @CrashReports
  • 14.
    Merci ! EmmanuelAstier - UncaughtExceptionHandler initial http://androidblogger.blogspot.com/ Pierre-Yves Ricau - Mavenizator Jan Berkel - Analyses via GVT PAUG VOUS !