在不进入shell

时间:2017-03-06 04:30:47

标签: android shell adb logcat

我正在尝试在我的Android设备中启动内部日志,而不必直接进入adb shell。我必须编写此过程的脚本,以便我可以从程序中运行它。

我知道你可以采取以下步骤在Android设备上启动内部日志:

  1. 打开cmd提示
  2. 输入'adb shell'
  3. 输入'logcat -v time -f /sdcard/LogFile.txt&'
  4. 以上将在实际设备中启动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&'

    这似乎没有做任何事情。它似乎在窗口出现后发送命令,但实际上并没有执行操作。

    非常感谢有关此主题的任何帮助。感谢。

1 个答案:

答案 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();