Страница 1 из 1
Логи падения приложения
Добавлено: 06 сен 2013, 13:14
alu
Есть ли возможность как-то получить логи падения приложения? Т.е. те логи которые видны в IDE во время работы приложения с "Error" уровнем. Как я понимаю эти логи включая номера строк пишутся всегда (видимо отладочная информация не убирается после сборки приложения).
Допустим человек что-то сделал и в приложении возникла исключительная ситуация, которая его закрыла. Мне нужны последние логи работы приложения с "Error" уровнем, хотябы сохраненные в файле, чтоб его можно было отослать по почте. В лучшем случае автоматически слались либо на сайт, либо на почту.
Re: Логи падения приложения
Добавлено: 06 сен 2013, 14:08
KamiSempai
Можно использовать специальные библиотеки.
Если по мимо логов хочется узнать по больше информации о состоянии телефона во время падения, подойдет ACRA:
https://github.com/ACRA/acra
Я пользуюсь Flury. Там не все так подробно, но логи посмотреть можно:
http://www.flurry.com/
Re: Логи падения приложения
Добавлено: 06 сен 2013, 16:56
alu
KamiSempai писал(а):Можно использовать специальные библиотеки.
Если по мимо логов хочется узнать по больше информации о состоянии телефона во время падения, подойдет ACRA:
https://github.com/ACRA/acra
Я пользуюсь Flury. Там не все так подробно, но логи посмотреть можно:
http://www.flurry.com/
A crash reporting feature for android apps is native since Android 2.2 (FroYo) but only available through the official Android Market (and with limited data).
Всмысле в самом маркете в интерфейсе разработчика есть эти логи о падении приложения с причинами и номерами строк? Просто я там не регистнировался еще и не знаю о возможностях.
Re: Логи падения приложения
Добавлено: 06 сен 2013, 17:10
KamiSempai
Да, в интерфейсе разработчика можно посмотреть логи ошибок, но появляются они там после того как пользователь нажмет кнопку отправки отчета об ошибке после вылета приложения. Делают это единицы.
Re: Логи падения приложения
Добавлено: 06 сен 2013, 17:48
alu
KamiSempai писал(а):Да, в интерфейсе разработчика можно посмотреть логи ошибок, но появляются они там после того как пользователь нажмет кнопку отправки отчета об ошибке после вылета приложения. Делают это единицы.
Зарегаюсь попозже. Кстати там для оплаты 25 баксов доллоровая карточка нужна или рублевая там сама конвертируется?
Re: Логи падения приложения
Добавлено: 07 сен 2013, 00:15
KamiSempai
Подойдет любая карточка. Валюта конвертируется автоматически.
Re: Логи падения приложения
Добавлено: 19 окт 2013, 22:03
alu
Ну в общем небольшой опыт появился. Flurry если честно маловато информации дает. Логи падения не полные, а всего несколько последних строчек, из которых, например, я не смог вычислить источник, до тех пор пока какой-то пользователь не нажал кнопку отправить после падения приложения (с комментарием в стиле "все гАвно") Статистику дает непонятно и удобство их сайта оставляет желать лучшего. Насчет статистики я все же наверно позже попробую Google Analytics для Андроида
Flurry в паре случаев помогал конечно, но есть полный смысл что-то другое пробовать.
Re: Логи падения приложения
Добавлено: 20 окт 2013, 01:26
KamiSempai
С последней версией SDK отчеты об ошибка вполне информативные. Есть отдельная вкладка "Errors", там подробно.
Из всего остального для меня важно видеть приблизительное количество активных пользователей, так как гугл такой статистики не дает, а также статистика по количеству ошибок. Flurry с этим отлично справляется.
Re: Логи падения приложения
Добавлено: 16 ноя 2013, 19:42
DeadKenny
Можно использовать Acra. Если есть какой-нибудь сайт свой, или место где можно разместить скрипт, то можно настроить Acra примерно так:
Код: Выделить всё
@ReportsCrashes(formKey = "",
formUri = Constants.ERROR_REPORT_URL, formUriBasicAuthLogin = Constants.ERROR_LOGIN, formUriBasicAuthPassword = Constants.ERROR_PASSWORD, mode = ReportingInteractionMode.TOAST, resToastText = R.string.crash_toast_text)
Где ERROR_REPORT_URL - скрипт PHP, ERROR_LOGIN - логин в скрипте, ERROR_PASSWORD пароль в скрипте.
Ну а тело самого скрипта такое:
Код: Выделить всё
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Текст, отправляемый в том случае,
если пользователь нажал кнопку Cancel';
exit;
} else {
// анализируем переменную PHP_AUTH_DIGEST
if ($_SERVER['PHP_AUTH_USER'] != '_логин_' || $_SERVER['PHP_AUTH_PW'] != '_пароль_')
exit;
$android_version = $_POST['ANDROID_VERSION'];
$build = $_POST['BUILD'];
$brand = $_POST['BRAND'];
$stack_trace = $_POST['STACK_TRACE'];
$avail_mem_size = $_POST['AVAILABLE_MEM_SIZE'];
$app_version_code = $_POST['APP_VERSION_CODE'];
$mymail="app_name@mail-server.ru";
$headers = "From: ".$mymail;
if( $stack_trace != "" && $app_version_code > 16)
{
mail ($mymail, "Отчет об ошибке V".$app_version_code, "$android_version\r\n$build\r\n$brand\r\n$avail_mem_size\r\n$app_version_code\r\n$stack_trace",$headers);
echo "OK";
}
}
?>
Этот скрипт пошлет отчет об ошибке на указанный мэйл, а в заголовке укажет Отчет об ошибке Vверсия_приложения.
Re: Логи падения приложения
Добавлено: 16 ноя 2013, 23:18
alu
DeadKenny писал(а):Можно использовать Acra. Если есть какой-нибудь сайт свой, или место где можно разместить скрипт, то можно настроить Acra примерно так:
Код: Выделить всё
@ReportsCrashes(formKey = "",
formUri = Constants.ERROR_REPORT_URL, formUriBasicAuthLogin = Constants.ERROR_LOGIN, formUriBasicAuthPassword = Constants.ERROR_PASSWORD, mode = ReportingInteractionMode.TOAST, resToastText = R.string.crash_toast_text)
Где ERROR_REPORT_URL - скрипт PHP, ERROR_LOGIN - логин в скрипте, ERROR_PASSWORD пароль в скрипте.
Ну а тело самого скрипта такое:
Код: Выделить всё
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Текст, отправляемый в том случае,
если пользователь нажал кнопку Cancel';
exit;
} else {
// анализируем переменную PHP_AUTH_DIGEST
if ($_SERVER['PHP_AUTH_USER'] != '_логин_' || $_SERVER['PHP_AUTH_PW'] != '_пароль_')
exit;
$android_version = $_POST['ANDROID_VERSION'];
$build = $_POST['BUILD'];
$brand = $_POST['BRAND'];
$stack_trace = $_POST['STACK_TRACE'];
$avail_mem_size = $_POST['AVAILABLE_MEM_SIZE'];
$app_version_code = $_POST['APP_VERSION_CODE'];
$mymail="app_name@mail-server.ru";
$headers = "From: ".$mymail;
if( $stack_trace != "" && $app_version_code > 16)
{
mail ($mymail, "Отчет об ошибке V".$app_version_code, "$android_version\r\n$build\r\n$brand\r\n$avail_mem_size\r\n$app_version_code\r\n$stack_trace",$headers);
echo "OK";
}
}
?>
Этот скрипт пошлет отчет об ошибке на указанный мэйл, а в заголовке укажет Отчет об ошибке Vверсия_приложения.
А какой размер этого пакета? То флюри сразу приложение в два раза размер увеличил - на 500К. Для небольшой утилитки это не очень хорошо
Re: Логи падения приложения
Добавлено: 16 ноя 2013, 23:23
DeadKenny
alu писал(а):
А какой размер этого пакета? То флюри сразу приложение в два раза размер увеличил - на 500К. Для небольшой утилитки это не очень хорошо
99 килобайт jar файл весит.
https://github.com/ACRA/acra
Re: Логи падения приложения
Добавлено: 25 ноя 2013, 15:57
Nik
Помогите найти причину падения приложения.
11-25 12:52:19.678: E/AndroidRuntime(1130): FATAL EXCEPTION: main
11-25 12:52:19.678: E/AndroidRuntime(1130): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.therapy/com.example.therapy.Otravl}: java.lang.NullPointerException
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
Re: Логи падения приложения
Добавлено: 25 ноя 2013, 16:31
trew
Nik писал(а):Помогите найти причину падения приложения.
11-25 12:52:19.678: E/AndroidRuntime(1130): FATAL EXCEPTION: main
11-25 12:52:19.678: E/AndroidRuntime(1130): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.therapy/com.example.therapy.Otravl}: java.lang.NullPointerException
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
У тебя что-то возвращает NULL. Может переменную объявил, а значение ей не присвоил.
Можешь погуглить ошибку: java.lang.NullPointerException
(двойной щелчок по этой строке в логе - должен перекинуть в код, на строку с ошибкой)
Re: Логи падения приложения
Добавлено: 25 ноя 2013, 18:49
Nik
trew писал(а):Nik писал(а):Помогите найти причину падения приложения.
11-25 12:52:19.678: E/AndroidRuntime(1130): FATAL EXCEPTION: main
11-25 12:52:19.678: E/AndroidRuntime(1130): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.therapy/com.example.therapy.Otravl}: java.lang.NullPointerException
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-25 12:52:19.678: E/AndroidRuntime(1130): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
У тебя что-то возвращает NULL. Может переменную объявил, а значение ей не присвоил.
Можешь погуглить ошибку: java.lang.NullPointerException
(двойной щелчок по этой строке в логе - должен перекинуть в код, на строку с ошибкой)
нашел ошибку. (кривые руки + глюки// 2 одинаковых кнопки работали в одной форме)
Re: Логи падения приложения
Добавлено: 30 ноя 2013, 09:56
Nik
Лог падения приложения указывает на getResult
11-30 06:51:22.671: E/AndroidRuntime(1005): at cd.discriminant.MainActivity.getResult(MainActivity.java:81)
не могу понять в чем баг.
Код: Выделить всё
private void getResult(String mA, String mB, String mC) {
// TODO Auto-generated method stub
//Объявление переменных
int mValueA; int mValueB; int mValueC;
//Проверяем были ли введенны данные вообще
if (a.length() == 0) { \\точнее вот это место ругается. что его здесь не устраивает?
a = "1";
mValueA = 1;
}
else {
mValueA = Integer.parseInt(a);
}
//Достаем из строки число типа int
if (b.length() == 0) {
b = "0";
mValueB = 0;
} else {
mValueB = Integer.parseInt(b);
}
if (c.length() == 0) {
c = "0"; mValueC = 0;
} else {
mValueC = Integer.parseInt(c);
}
//Передаем числовые данные функции расчета уравнения
Discrim(mValueA, mValueB, mValueC);
/*Собираем строку для вывода данных * Подготовка основного уравнения * a не должно равняться 0 */
if (mValueA == 0)
mResult = 1 + "x2";
else
mResult = a + "x2";
if (mValueB < 0 )
mResult += b + "x";
else
mResult += "+" + b + "x";
if (mValueC < 0)
mResult += c + " = 0";
else
mResult += "+" + c + "= 0";
//Вывод уравнения расчета x1 и x2
mResult += "x1,x2 = (-(" + b + ")±√" + b + "2-4×" + a + "×" + c + ")/2×" + a + " = 0";
/*В зависимости от значения дискриминанта добавляем данные. * D < 0 - строка c сообщением * D > 0 - результаты расчета x1 и x2 */
if (D < 0) {
mResult += "Уравнение не имеет решения, так как дискриминант меньше 0";
} else {
mResult += "x1 = -(" + b + ") + √" + D + " = " + x1 + "";
mResult += "x2 = -(" + b + ") - √" + D + " = " + x2 + "";
}
}
Re: Логи падения приложения
Добавлено: 30 ноя 2013, 10:12
Foenix
А в чем баг написано в логе строчкой выше!!
Re: Логи падения приложения
Добавлено: 30 ноя 2013, 10:15
Nik
Foenix писал(а):А в чем баг написано в логе строчкой выше!!
11-30 06:51:22.671: E/AndroidRuntime(1005): java.lang.NullPointerException
нуль? а что нуль? откуда он пришел?
Re: Логи падения приложения
Добавлено: 30 ноя 2013, 10:23
Foenix
щелкай туда два раза. В той строчке будет ошибка, значит какая-то переменная не проинициализирована. Т.е. ищи ее инициализацию выше - или ее вообще нет, или оператор не сработал - что-то не найдено и так далее.
NPE в 99% случаев легкая ошибка, ее можно найти самому.