Я хотел бы вытащить файл журнала с устройства на свой компьютер. Как я могу это сделать?
Как получить файл журнала с устройства Android?
Ответ 1
Logcollector - хороший вариант, но вам нужно сначала его установить.
Когда я хочу получить файл журнала для отправки по почте, я обычно делаю следующее:
- подключите устройство к компьютеру.
- Убедитесь, что я уже настроил os для этого конкретного устройства.
- Откройте терминал
- Выполнить
adb shell logcat > log.txt
Ответ 2
Я надеюсь, что этот код поможет кому-то. Мне потребовалось 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" />
Ответ 3
Я бы использовал что-то подобное:
$adb logcat -d > logcat.txt
Параметр -d выгружает весь круговой буфер в текстовый файл, и если вы ищете конкретную попытку действия/намерения
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
Надеюсь, что это поможет:)
Ответ 4
ИЗМЕНИТЬ:
Внутренний журнал - это круговой буфер в памяти. На самом деле существует несколько таких циклических буферов для каждого из: радио, событий, основного. По умолчанию основной.
Чтобы получить копию буфера, один метод включает выполнение команды на устройстве и получение результата в виде строковой переменной.
SendLog - это приложение с открытым исходным кодом, которое выполняет только это: http://www.l6n.org/android/sendlog.shtml
Ключ должен запускать logcat
на устройстве во встроенной ОС. Это не так сложно, как кажется, просто посмотрите приложение с открытым исходным кодом в ссылке.
Ответ 5
Для тех, кто не заинтересован в отладке USB или использовании adb
, существует более простое решение. В Android 6 (не уверен о предыдущей версии) есть опция в инструментах разработчика: Take Bug Report
При нажатии этой опции будет подготовлен отчет об ошибке и предложено сохранить его на диске или отправить его по электронной почте.
Я нашел, что это самый простой способ получить журналы. Я не люблю включать USB-отладку.
Ответ 6
Часто я получаю сообщение об ошибке "logcat read: Invalid argument
". Я должен был очистить журнал, прежде чем читать из журнала.
Мне нравится следующее:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
Ответ 7
Простым способом является создание собственных методов сбора журналов или даже всего существующего приложения для создания журналов на рынке.
В моих приложениях я создал функцию отчета, которая отправляет журналы на мой адрес электронной почты (или даже в другое место), как только вы получите журнал, который вы можете делать, если хотите с ним).
Вот простой пример того, как получить файл журнала с устройства:
Ответ 8
Благодаря пользователю1354692 я мог сделать это проще, только с одной строкой! тот, который он прокомментировал:
try {
File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
Ответ 9
Я создал небольшую библиотеку (.aar) для извлечения журналов по электронной почте. Вы можете использовать его с учетными записями Gmail. Это довольно просто, но работает. Вы можете получить копию отсюда
Сайт находится на испанском языке, но есть PDF с английской версией описания продукта.
Надеюсь, это поможет.
Ответ 10
Просто выполните следующую команду, чтобы получить вывод на ваш терминал:
adb shell logcat
Ответ 11
Два шага:
- Сгенерировать журнал
- Загрузить Gmail для отправки журнала
.
-
Создать журнал
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; }
-
Загрузите 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 в качестве опции
- прикрепляет файл успешно
Большое спасибо fooobar.com/questions/54445/... за правильный рабочий ответ
Ответ 12
Сначала убедитесь, что команда 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