Intereting Posts
Вызов библиотеки C ++ из Java в Android SwitchPreference onChecked / onClick Listener Android MediaScanner: удалить файлы изображений из галереи Android: как избежать этого нажатия на вызовы уведомлений onCreate () FastScroller только прокручивает назад к первому элементу, а не к виду заголовка Запуск startLeScan в текущий api Почему в Google Play Store не отображается причина недоступности устройства для приложения? Проведите часть экрана Как вы управляете пользовательской документацией для приложения для Android? Пользовательские анимации для запуска действий в Android не работают должным образом Android Databinding: пакет не существует Не удалось запустить виртуальное устройство Genymotion – виртуальный абонентский хост Ethernet-адаптер не удалось запустить Android Studio & ProGuard: не удается разрешить символ getDefaultProguardFile? Как получить диапазон широты / долготы в Google Map V2 для Android Почему Eclipse / adb не обнаружит мое устройство Samsung Galaxy Tab на моем Mac?

Как получить файл журнала с устройства Android?

Я хотел бы вытащить файл журнала с устройства на свой компьютер. Как я могу это сделать?

Solutions Collecting From Web of "Как получить файл журнала с устройства Android?"

Logcollector – хороший вариант, но сначала его нужно установить.

Когда я хочу получить файл журнала для отправки по почте, я обычно делаю следующее:

  • Подключите устройство к компьютеру.
  • Убедитесь, что я уже настроил os для этого конкретного устройства .
  • Открыть терминал
  • Запустить adb shell logcat > log.txt

Надеюсь, этот код поможет кому-то. Мне потребовалось 2 дня, чтобы выяснить, как сходить с устройства, а затем отфильтровать его:

 public File extractLogToFileAndWeb(){ //set a file Date datum = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.ITALY); String fullName = df.format(datum)+"appLog.log"; File file = new File (Environment.getExternalStorageDirectory(), fullName); //clears a file if(file.exists()){ file.delete(); } //write log to file int pid = android.os.Process.myPid(); try { String command = String.format("logcat -d -v threadtime *:*"); Process process = Runtime.getRuntime().exec(command); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); StringBuilder result = new StringBuilder(); String currentLine = null; while ((currentLine = reader.readLine()) != null) { if (currentLine != null && currentLine.contains(String.valueOf(pid))) { result.append(currentLine); result.append("\n"); } } FileWriter out = new FileWriter(file); out.write(result.toString()); out.close(); //Runtime.getRuntime().exec("logcat -d -v time -f "+file.getAbsolutePath()); } catch (IOException e) { Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show(); } //clear the log try { Runtime.getRuntime().exec("logcat -c"); } catch (IOException e) { Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show(); } return file; } 

Как указано @mehdok

Добавить разрешение манифеста для чтения журналов

 <uses-permission android:name="android.permission.READ_LOGS" /> 

Я бы использовал что-то подобное:

 $adb logcat -d > logcat.txt 

Опция -d выгружает весь круговой буфер в текстовый файл, и если вы ищете конкретную попытку действия / намерения

 $adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt 

Надеюсь это поможет 🙂

РЕДАКТИРОВАТЬ:

Внутренний журнал – это круговой буфер в памяти. На самом деле существует несколько таких круговых буферов для каждого из: радио, событий, основного. Значение по умолчанию – основное.

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

SendLog – это приложение с открытым исходным кодом, которое выполняет только это: http://www.l6n.org/android/sendlog.shtml

Ключом является запуск logcat на устройстве во встроенной ОС. Это не так сложно, как кажется, просто посмотрите приложение с открытым исходным кодом в ссылке.

Для тех, кто не заинтересован в отладке USB или использовании adb есть более простое решение. В Android 6 (не уверен в предыдущей версии) есть опция в инструментах разработчика: Take Bug Report

При нажатии этой опции будет подготовлен отчет об ошибке и предложено сохранить его на диске или отправить его по электронной почте.

Я нашел, что это самый простой способ получить журналы. Я не люблю включать USB-отладку.

Часто я получаю сообщение об ошибке « logcat read: Invalid argument ». Я должен был очистить журнал, прежде чем читать из журнала.

Мне это нравится:

 prompt> cd ~/Desktop prompt> adb logcat -c prompt> adb logcat | tee log.txt 

Простым способом является создание ваших собственных методов сбора журналов или даже только существующего приложения для создания журналов на рынке.

Для моих приложений я создал функцию отчета, которая отправляет журналы на мою электронную почту (или даже в другое место), как только вы получите журнал, который вы можете сделать, если хотите с ним).

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

Благодаря user1354692 я мог сделать это проще, только с одной строкой! Тот, который он прокомментировал:

 try { File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis())); Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){} 

Просто выполните следующую команду, чтобы получить вывод на ваш терминал:

 adb shell logcat 

Я создал небольшую библиотеку (.aar) для извлечения журналов по электронной почте. Вы можете использовать его с учетными записями Gmail. Это довольно просто, но работает. Вы можете получить копию отсюда

Сайт находится на испанском языке, но есть PDF с английской версией описания продукта.

Надеюсь, это поможет.

Два шага:

  • Создать журнал
  • Загрузить Gmail для отправки журнала

,

  1. Создать журнал

     File generateLog() { File logFolder = new File(Environment.getExternalStorageDirectory(), "MyFolder"); if (!logFolder.exists()) { logFolder.mkdir(); } String filename = "myapp_log_" + new Date().getTime() + ".log"; File logFile = new File(logFolder, filename); try { String[] cmd = new String[] { "logcat", "-f", logFile.getAbsolutePath(), "-v", "time", "ActivityManager:W", "myapp:D" }; Runtime.getRuntime().exec(cmd); Toaster.shortDebug("Log generated to: " + filename); return logFile; } catch (IOException ioEx) { ioEx.printStackTrace(); } return null; } 
  2. Загрузить Gmail для отправки журнала

     File logFile = generateLog(); Intent intent = new Intent(Intent.ACTION_SEND); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(logFile)); intent.setType("multipart/"); startActivity(intent); 

Ссылки на # 1

~~

Для # 2 – существует много разных ответов, как загрузить файл журнала для просмотра и отправки. Наконец, решение здесь фактически работало с обоими:

  • Загрузить Gmail в качестве опции
  • Успешно прикрепляет файл

Большое спасибо https://stackoverflow.com/a/22367055/2162226 за корректный рабочий ответ

Сначала убедитесь, что команда adb выполнима, установив PATH на платформенные инструменты android sdk:

 export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH 

Затем выполните:

 adb shell logcat > log.txt 

ИЛИ сначала перейдите к инструментам платформы adb:

 cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools 

Затем запустите

 ./adb shell logcat > log.txt