Réponses:
Logcollector est une bonne option, mais vous devez d'abord l'installer.
Lorsque je souhaite envoyer le fichier journal par courrier électronique, je fais généralement ce qui suit:
adb shell logcat > log.txtadb. Habituellement enC:\Users\[your username]\AppData\Local\Android\Sdk\platform-tools\
J'espère que ce code aidera quelqu'un. Il m'a fallu 2 jours pour comprendre comment me connecter à partir de l'appareil, puis le filtrer:
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;
}
comme indiqué par @mehdok
ajouter l'autorisation au manifeste pour la lecture des journaux
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_LOGS" />
J'utiliserais quelque chose de ce genre:
$adb logcat -d > logcat.txt
L'option -d vide la totalité du tampon circulaire dans le fichier texte et si vous recherchez une action / intention particulière, essayez
$adb logcat -d | grep 'com.whatever.you.are.looking.for' -B 100 -A 100 > shorterlog.txt
J'espère que cela t'aides :)
Pour ceux qui ne sont pas intéressés par le débogage USB ou l'utilisation, adbil existe une solution plus simple. Dans Android 6 (pas sûr de la version précédente), il existe une option sous les outils de développement: Take Bug Report
Cliquez sur cette option pour préparer un rapport de bogue et vous inviter à l'enregistrer sur le lecteur ou à le faire envoyer par courrier électronique.
J'ai trouvé que c'était le moyen le plus simple d'obtenir des journaux. Je n'aime pas activer le débogage USB.
ÉDITER:
Le journal interne est un tampon circulaire en mémoire. Il existe en fait quelques tampons circulaires pour chacun des éléments suivants: radio, événements, main. La valeur par défaut est main.
Pour obtenir une copie d'un tampon, une technique consiste à exécuter une commande sur le périphérique et à obtenir la sortie sous forme de variable chaîne.
SendLog est une application open source qui fait exactement cela: http://www.l6n.org/android/sendlog.shtml
La clé est de s'exécuter logcatsur l'appareil dans le système d'exploitation intégré. Ce n'est pas aussi difficile que cela en a l'air, il suffit de consulter l'application open source dans le lien.
Souvent, j'obtiens l'erreur " logcat read: Invalid argument". J'ai dû effacer le journal avant de lire le journal.
J'aime ça:
prompt> cd ~/Desktop
prompt> adb logcat -c
prompt> adb logcat | tee log.txt
Un moyen simple consiste à créer vos propres méthodes de collecte de journaux ou même simplement une application de collecte de journaux existante du marché.
Pour mes applications, j'ai créé une fonctionnalité de rapport qui envoie les journaux à mon courrier électronique (ou même à un autre endroit - une fois que vous obtenez le journal, vous pouvez le faire si vous le souhaitez).
Voici un exemple simple sur la façon d'obtenir le fichier journal à partir d'un appareil:
Simple, exécutez simplement la commande suivante pour obtenir la sortie sur votre terminal:
adb shell logcat
Je sais que c'est une vieille question, mais je crois toujours valable même en 2018.
Il existe une option pour prendre un rapport de bogue caché dans les options de développement de chaque appareil Android.
REMARQUE: cela viderait le journal du système entier
Comment activer les options de développement? voir: https://developer.android.com/studio/debug/dev-options
Ce qui fonctionne pour moi:
comment lire ceci? ouvrir bugreport-1960-01-01-hh-mm-ss.txt
vous voulez probablement rechercher quelque chose comme ceci:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of crash
06-13 14:37:36.542 19294 19294 E AndroidRuntime: FATAL EXCEPTION: main
ou:
------ SYSTEM LOG (logcat -v threadtime -v printable -d *:v) ------
--------- beginning of main
Grâce à user1354692, j'ai pu rendre les choses plus faciles, avec une seule ligne! celui qu'il a commenté:
try {
File file = new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()));
Runtime.getRuntime().exec("logcat -d -v time -f " + file.getAbsolutePath());}catch (IOException e){}
OnCreate?
J'ai créé une petite bibliothèque (.aar) pour récupérer les logs par email. Vous pouvez l'utiliser avec des comptes Gmail. C'est assez simple mais ça marche. Vous pouvez en obtenir une copie d'ici
Le site est en espagnol, mais il existe un PDF avec une version anglaise de la description du produit.
J'espère que cela peut aider.
Deux étapes:
- Générer le journal
- Chargez Gmail pour envoyer le journal
.
Générer le journal
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;
}Chargez Gmail pour envoyer le journal
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);Références pour # 1
~~
Pour # 2 - il existe de nombreuses réponses différentes pour savoir comment charger le fichier journal à afficher et à envoyer. Enfin, la solution ici fonctionnait à la fois:
- charger Gmail en option
- joint le fichier avec succès
Un grand merci à https://stackoverflow.com/a/22367055/2162226 pour la réponse qui fonctionne correctement
Assurez-vous d'abord que la commande adb est exécutable en définissant PATH sur android sdk platform-tools:
export PATH=/Users/espireinfolabs/Desktop/soft/android-sdk-mac_x86/platform-tools:$PATH
puis exécutez:
adb shell logcat > log.txt
OU passez d'abord aux outils de la plate-forme adb:
cd /Users/user/Android/Tools/android-sdk-macosx/platform-tools
puis courir
./adb shell logcat > log.txt