0

Je suis un développeur Android, je développe des applications pour les clients. Toutefois, dans les périphériques clients, un problème de blocage d'application s'est généralement produit. Mais ce n'est pas arrivé dans mon appareil. Mais je ne peux pas atteindre mon client, alors, voici la question: ~~~~ Y at-il un plugin ou des outils qui peuvent implémenter dans mes applications Android, donc quand les applications sont plantées dans l'appareil de mon client, les journaux de plantage seront envoyés à mon email ou quelque part je peux le vérifier, ainsi je peux le déboguer. S'il vous plaît me conseiller, merciApplications Android Enregistreur - pour testeur

Répondre

1

Rendez-vous au https://play.google.com/apps/publish/ et publiez votre application. Lorsque les utilisateurs installent votre application et qu'elle plante, elle avertit Google, et lorsque vous vous connecterez à ce panneau de contrôle, vous pourrez trouver ces rapports sous l'onglet "Rapports", puis sous "CRASHES & ANRS".

+0

Existe-t-il d'autres outils ou un plugin peut-il faire cela? Parce que mon client est en Chine, il ne peut pas se connecter à google. –

+0

Merci de me répondre de toute façon –

+0

Pas que je sache (il pourrait y avoir!). – alfasin

0

Je pense que vous devez étendre la classe d'application, et redéfinir Exception poignée avec le code stable (independed de la version Android).

Exemple de code:

YourApplication.java

public class YourApplication extends Application {  
@Override 
public void onCreate() { 
    Thread.setDefaultUncaughtExceptionHandler(ExceptionHandler.inContext(getApplicationContext())); 

    super.onCreate(); 
}} 

ExceptionHandler.java

final public class ExceptionHandler implements Thread.UncaughtExceptionHandler{ 
private final DateFormat formatter = new SimpleDateFormat("dd.MM.yy HH:mm"); 
private final DateFormat fileFormatter = new SimpleDateFormat("dd-MM-yy"); 
private String versionName = "0"; 
private int versionCode = 0; 
private final String stacktraceDir; 
private final Thread.UncaughtExceptionHandler previousHandler; 

private ExceptionHandler(Context context, boolean chained) { 

    PackageManager mPackManager = context.getPackageManager(); 
    PackageInfo mPackInfo; 
    try { 
     mPackInfo = mPackManager.getPackageInfo(context.getPackageName(), 0); 
     versionName = mPackInfo.versionName; 
     versionCode = mPackInfo.versionCode; 
    } catch (PackageManager.NameNotFoundException e) { 
     // ignore 
    } 
    if(chained) 
     previousHandler = Thread.getDefaultUncaughtExceptionHandler(); 
    else 
     previousHandler = null; 
    stacktraceDir = String.format("/Android/data/%s/files/", context.getPackageName()); 
} 

static ExceptionHandler inContext(Context context) { 
    return new ExceptionHandler(context, true); 
} 

static ExceptionHandler reportOnlyHandler(Context context) { 
    return new ExceptionHandler(context, false); 
} 

@Override 
public void uncaughtException(Thread thread, Throwable exception) { 
    final String state = Environment.getExternalStorageState(); 
    final Date dumpDate = new Date(System.currentTimeMillis()); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 

     StringBuilder reportBuilder = new StringBuilder(); 
     reportBuilder 
       .append("\n\n\n") 
       .append(formatter.format(dumpDate)).append("\n") 
       .append(String.format("Version: %s (%d)\n", versionName, versionCode)) 
       .append(thread.toString()).append("\n"); 
     processThrowable(exception, reportBuilder); 

     File sd = Environment.getExternalStorageDirectory(); 
     File stacktrace = new File(
       sd.getPath() + stacktraceDir, 
       String.format(
         "stacktrace-%s.txt", 
         fileFormatter.format(dumpDate))); 
     File dumpdir = stacktrace.getParentFile(); 
     boolean dirReady = dumpdir.isDirectory() || dumpdir.mkdirs(); 
     if (dirReady) { 
      FileWriter writer = null; 
      try { 
       writer = new FileWriter(stacktrace, true); 
       writer.write(reportBuilder.toString()); 
      } catch (IOException e) { 
       // ignore 
      } finally { 
       try { 
        if (writer != null) 
         writer.close(); 
       } catch (IOException e) { 
        // ignore 
       } 
      } 
     } 
    } 
    if(previousHandler != null) 
     previousHandler.uncaughtException(thread, exception); 
} 

private void processThrowable(Throwable exception, StringBuilder builder) { 
    if(exception == null) 
     return; 
    StackTraceElement[] stackTraceElements = exception.getStackTrace(); 
    builder 
      .append("Exception: ").append(exception.getClass().getName()).append("\n") 
      .append("Message: ").append(exception.getMessage()).append("\nStacktrace:\n"); 
    for(StackTraceElement element : stackTraceElements) { 
     builder.append("\t").append(element.toString()).append("\n"); 
    } 
    processThrowable(exception.getCause(), builder); 
}} 

Si votre application crased, vous trouverez un journal avec StackTrace à/sdcard/android/data/you.package.name/files/tous les fichiers journaux. Vous pouvez également vérifier les nouveaux fichiers journaux dans ce dossier à chaque démarrage de l'application. Si vous trouvez de nouveaux fichiers, vous pouvez l'envoyer à votre adresse e-mail.