Как получить журналы сбоев Android?

У меня есть приложение, которое не находится на рынке (подписанное с сертификатом отладки), но хотел бы получить данные журнала сбоев, когда мое приложение вылетает из строя. Где я могу найти журнал, почему мое приложение разбилось?

Ответ 1

Если ваше приложение загружается другими людьми и сбой на удаленных устройствах, вы можете захотеть заглянуть в библиотеку отчетов об ошибках Android (ссылка на этот пост SO)., Если это возможно только на вашем собственном локальном устройстве, вы можете использовать LogCat. Даже если устройство не было подключено к главной машине, когда произошел сбой, подключение устройства и выдача команды adb logcat будет загружать всю историю журнала (в по крайней мере, в той мере, в какой он буферизуется, что обычно является лоутопом данных журнала, оно просто не бесконечно). Может ли любой из этих вариантов ответить на ваш вопрос? Если вы не можете попытаться уточнить, что вы ищете немного больше?

Ответ 2

Способ сделать это - реализовать интерфейс Thread.UncaughtExceptionHandler и передать его Thread.setDefaultUncaughtExceptionHandler() в начале вашей onCreate(). Вот класс реализации TopExceptionHandler.

public class TopExceptionHandler implements Thread.UncaughtExceptionHandler {
    private Thread.UncaughtExceptionHandler defaultUEH;
    private Activity app = null;

    public TopExceptionHandler(Activity app) {
        this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
        this.app = app;
    }

    public void uncaughtException(Thread t, Throwable e) {
        StackTraceElement[] arr = e.getStackTrace();
        String report = e.toString()+"\n\n";
        report += "--------- Stack trace ---------\n\n";
        for (int i=0; i<arr.length; i++) {
            report += "    "+arr[i].toString()+"\n";
        }
        report += "-------------------------------\n\n";

        // If the exception was thrown in a background thread inside
        // AsyncTask, then the actual exception can be found with getCause

        report += "--------- Cause ---------\n\n";
        Throwable cause = e.getCause();
        if(cause != null) {
            report += cause.toString() + "\n\n";
            arr = cause.getStackTrace();
            for (int i=0; i<arr.length; i++) {
                report += "    "+arr[i].toString()+"\n";
            }
        }
        report += "-------------------------------\n\n";

        try {
            FileOutputStream trace = app.openFileOutput("stack.trace", 
                                                        Context.MODE_PRIVATE);
            trace.write(report.getBytes());
            trace.close();
        } catch(IOException ioe) {
        // ...
        }

        defaultUEH.uncaughtException(t, e);
    }
}

Примечание. Мы разрешаем платформе Android defaultUEH справиться с этим.

В верхней части вашей Activity зарегистрируйте экземпляр вышеупомянутого класса, например:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
...

Этот обработчик сохраняет трассировку в файл. Когда ReaderScope перезапускается в следующий раз, он обнаруживает файл и запрашивает пользователя, хочет ли он отправить его разработчику по электронной почте.

Чтобы отправить по электронной почте трассировку стека, выполните следующий код, чтобы упаковать его в электронное письмо.

try {
    BufferedReader reader = new BufferedReader(
        new InputStreamReader(ReaderScopeActivity.this.openFileInput("stack.trace")));
    while((line = reader.readLine()) != null) {
        trace += line+"\n";
    }
} catch(FileNotFoundException fnfe) {
    // ...
} catch(IOException ioe) {
    // ...
}

Intent sendIntent = new Intent(Intent.ACTION_SEND);
String subject = "Error report";
String body = "Mail this to [email protected]: " + "\n" + trace + "\n";

sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
sendIntent.putExtra(Intent.EXTRA_TEXT, body);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sendIntent.setType("message/rfc822");

ReaderScopeActivity.this.startActivity(Intent.createChooser(sendIntent, "Title:"));

ReaderScopeActivity.this.deleteFile("stack.trace");

Или вы также можете использовать систему отчетов об ошибках ACRA. Просто включите ACRA.jar в свои библиотеки проекта и используйте приведенный ниже фрагмент кода перед объявлением класса активности запуска.

@ReportsCrashes(formKey = "", mailTo = "[email protected];[email protected]", mode = ReportingInteractionMode.SILENT) 

или вы можете попробовать это с консоли: -

adb logcat -b crash 

Ответ 4

Вы можете попробовать это с консоли: -

adb logcat -b crash

Ответ 5

Вы можете использовать Apphance. Это кросс-платформенный сервис (теперь в основном Android, iOS с другими платформами на своем пути), который позволяет удаленно отлаживать любое мобильное устройство (Android, iOS сейчас - другие в разработке). Это намного больше, чем просто краш-лог, на самом деле это гораздо больше: протоколирование, отчетность о проблемах с помощью тестеров, аварийных логов. Для интеграции требуется около 5 минут. В настоящее время вы можете запросить доступ к закрытой бета-версии.

Отказ от ответственности: я технический директор Polidea, компании, стоящей за Apphance и соавтором ее.

Обновление: Apphance больше не закрывается бета-версией! Обновление 2: Apphance доступен как часть http://applause.com, предлагающего

Ответ 6

Вот еще одно решение для журнала сбоев.

В Android-рынке есть инструмент под названием "Crash Collector"

проверьте следующую ссылку для получения дополнительной информации

http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html

Ответ 7

Если вы используете Eclipse, убедитесь, что вы используете debug и не запускаете. Убедитесь, что вы находитесь в режиме отладки (вверху справа) Возможно, вам придется несколько раз нажать "Возобновить" (F8) для печати журнала. Журнал сбоев будет находиться в окне Logcat внизу - двойной щелчок для полноэкранного просмотра и убедитесь, что вы прокрутите страницу вниз. Вы увидите красный текст для ошибок, трассировка аварии будет выглядеть как

09-04 21:35:15.228: ERROR/AndroidRuntime(778): Uncaught handler: thread main exiting due to uncaught exception
09-04 21:35:15.397: ERROR/AndroidRuntime(778): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dazlious.android.helloworld/com.dazlious.android.helloworld.main}: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.app.ActivityThread.access$1800(ActivityThread.java:112)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.os.Looper.loop(Looper.java:123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.app.ActivityThread.main(ActivityThread.java:3948)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at java.lang.reflect.Method.invokeNative(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at java.lang.reflect.Method.invoke(Method.java:521)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at dalvik.system.NativeStart.main(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at com.example.android.helloworld.main.onCreate(main.java:13)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     ... 11 more

Важными частями для этого являются

09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778):     at com.example.android.helloworld.main.onCreate(main.java:13)

это говорят нам, что это исключение из диапазона исключений в строке 13 main.java в методе onCrate.

Ответ 8

Вы можете использовать ACRA из this. Включая эту библиотеку в свои проекты и настраивая ее, вы можете получать (в свой адрес электронной почты или gdocs) свои отчеты о сбоях. Извините за мой плохой английский.

Ответ 9

Если вы ищете базовый инструмент отчетов о сбоях, попробуйте crashlytics.

Если вам нужен более продвинутый инструмент отчетности, Checkout Gryphonet. Он регистрирует все произошедшие сбои вместе с точной строкой кода, которая вызвала сбой вместе с автоматическими маркерами, которые показывают вам шаги, предпринятые пользователем до сбоя и т.д.

Удачи!

Ответ 10

Используйте acra crash reporter для приложения для Android. Acra lib

Ответ 11

Вот решение, которое может помочь вам сбросить все журналы в текстовый файл

adb logcat -d > logs.txt

Ответ 12

Вы также можете использовать библиотеку crashcatcher

Ответ 13

Я создал эту библиотеку для решения всех ваших проблем. Crash Reporter - удобный инструмент для захвата всех ваших аварий и регистрации их на локальном устройстве

Просто добавьте эту зависимость, и вам будет хорошо.

compile 'com.balsikandar.android:crashreporter:1.0.1'

Найдите все свои сбои на устройстве локально и исправьте их в удобное для вас время. Сбои сохраняются с использованием формата даты и времени, который легко отслеживать. Кроме того, он также предоставляет API для захвата Записанные исключения, используя метод ниже.

CrashRepoter.logException(Exception e)

Ответ 14

Если вы просто ищете журнал сбоев, когда ваш телефон подключен к компьютеру, используйте представление DDMS в Eclipse, и отчет находится прямо в LogCat в DDMS, когда приложение отключается во время отладки.

Ответ 15

Вы можете использовать этот обработчик Uncaught Exception

enter image description here enter image description here

Настроить

В вашем файле проекта build.gradle:

allprojects {
   repositories {
       ...
       maven { url 'https://jitpack.io' }
   }
}

В вашем файле приложения или модуля build.gradle:

dependencies {
    implementation 'com.github.jampez77:UCE-Handler:uce_handler:1.4.3'
}

В вашем классе приложений:

  • Инициализируйте библиотеку, используя шаблон компоновщика.

    public class MyApplication extends Application {
       @Override 
       public void onCreate() { 
          ...
          // Initialize UCE_Handler Library
          new UCEHandler.Builder(this).build();
       } 
    }
    

Ответ 16

Попробуйте использовать приложение log4 для Android с Android.

используйте ссылку для загрузки приложения.