Android-приложения Logger - для тестера

Я разработчик Android, я разрабатываю приложения для клиентов. Однако на клиентских устройствах обычно возникала некоторая проблема с аварийным завершением приложения. Но этого не произошло в моем устройстве. Но я не могу связаться с моим клиентом, поэтому возникает вопрос:~~~~ Существуют ли какие-либо плагины или инструменты, которые можно внедрить в мои приложения для Android, поэтому, когда приложения рушатся на устройстве моего клиента, журналы сбоев будут отправляться на мой по электронной почте или где-нибудь я могу проверить это, так что я могу отладить его. Пожалуйста посоветуйте мне спасибо

3 ответа

Перейдите на https://play.google.com/apps/publish/ и опубликуйте свое приложение. Когда пользователи устанавливают ваше приложение, и оно вылетает, оно уведомляет Google, и когда вы войдете в эту панель управления, вы сможете найти такие отчеты на вкладке "Отчеты", а затем в разделе "СБОИ И АНРС".

Я думаю, что вы должны расширить класс Application и переопределить Exception Handle с помощью стабильного кода (независимо от версии Android).

Пример кода:

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

Если ваше приложение будет загружено, вы можете найти журнал в StackTrace по адресу /sdcard/android/data/you.package.name/files/ во всех файлах журнала. Также вы можете проверить новые файлы журналов в этой папке при каждом запуске приложения. Если вы найдете новые файлы, вы можете отправить это на свой электронный адрес.

Попробуйте взглянуть на Crashlytics: http://try.crashlytics.com/sdk-android/

Другие вопросы по тегам