我正在尝试在我的Android设备中启动内部日志,而不必直接进入adb shell。我必须编写此过程的脚本,以便我可以从程序中运行它。
我知道你可以采取以下步骤在Android设备上启动内部日志:
以上将在实际设备中启动logcat进程。我现在可以从电脑上拔下手机,然后四处走动,然后在我的测试完成后回来收集日志。至关重要的是,我能够启动此过程,并能够在日志仍在运行的情况下拔掉我的设备。
据我所知,在任何命令前运行'adb shell'会像在shell中一样运行。因此,通过这种逻辑,我尝试了运行:
方法1:
'adb shell logcat -v time -f /sdcard/LogFile.txt&'
此命令正确启动了设备上的日志,这很棒。但是,一旦我从计算机上拔下插件,logcat进程就会停止。
方法2:
'adb shell“logcat -v time -f /sdcard/LogFile.txt&” '
这似乎在手机上什么都没做,我不知道为什么。
方法3
我也尝试过脚本方法,我运行的Batch文件只包含: 'adb shell< commands.txt中“
其中命令有单行:
'logcat -v time -f /sdcard/LogFile.txt&'
这似乎没有做任何事情。它似乎在窗口出现后发送命令,但实际上并没有执行操作。
非常感谢有关此主题的任何帮助。感谢。
答案 0 :(得分:0)
您可以在应用程序类中使用此代码。因此,当应用程序启动时,此代码将开始执行。它将根据当前时间创建新的日志文件。
Thread t = new Thread(new Runnable() {
public void run() {
while (collectLog == true) {
try {
Thread.sleep(1000 * 60 * 6);
StringBuilder log = null;
Date now = new Date();
String fileName = formatter.format(now);
File file = new File(dir, fileName + "_logcat2.txt");
try {
Process process = Runtime.getRuntime().exec("logcat -d");// d will dump logs
//Process process = Runtime.getRuntime().exec("logcat -c"); c will clear logs
// process = Runtime.getRuntime().exec("logcat -f " + file);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
log.append("\n");
}
} catch (IOException e) {
}
try {
//to write logcat in text file
FileOutputStream fOut = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fOut)
// Write the string to the file
osw.append(log.toString());
osw.flush();
osw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
t.start();