android 从电脑访问日志文件

android access log file from pc

我的 6.0.1 应用程序在 2013 nexus( root)上重启时表现异常,因此我试图将日志文件写入内部存储。我通过连接到 PC 的 WiFi 进行套接字日志记录,但是当电源回收时出现问题,我的应用程序在收到启动完成时启动,所以我想我会写一个日志文件,所以我正在尝试:

    String filename="tablet.log";
    File logFile = new File(getFilesDir(), filename);
    p("log file: "+logFile);
    try {
        OutputStream outputStream = new FileOutputStream(logFile);
        outputStream.write("foo\n".getBytes());
        outputStream.close();
        p("wrote to log file: ");
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        InputStream inputStream = new FileInputStream(logFile);
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
        String string=bufferedReader.readLine();
        inputStream.close();
        p("read from log file: "+string);
    } catch (Exception e) {
        e.printStackTrace();
    }
    Logger global=Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
    LoggingHandler.init();
    LoggingHandler.setLevel(Level.WARNING);
    try {
        p("log file get name: "+logFile.getPath());
        Handler handler=new FileHandler(logFile.getPath());
        handler.setLevel(Level.ALL);
        l.addHandler(handler);
        l.warning("added file handler: "+handler);
    } catch(Exception e) {
        l.warning("file handler caught: "+e);
    }

似乎正在写入文件并且似乎添加了文件处理程序,但是当我使用 adb 时看不到文件:

D:\AndroidStudioProjects\Cb7>adb -s 0a9196e8 shell ls /data/user/0/com.tayek.tablet.gui.android.cb7

获取:opendir 失败,权限被拒绝

有什么办法可以把文件传到电脑上吗?

谢谢

编辑:jared 的建议有效:adb shell 运行-as com.tayek.tablet.gui.android.cb7 ls 文件 - 将显示文件!

另外,adb exec-out 运行-as package.name cat files/file > file 获取文件到 PC。

看起来需要:adb -s %device% shell 运行-as %package% ls -l /data/data/%package%/files

/data 中的文件无法被 shell 用户读取。您需要使用 run-as 命令,只要安装了调试版本,该命令就可以使用。


您可以检查文件是否存在:

adb shell run-as com.tayek.tablet.gui.android.cb7 ls files

要将文件复制到您的 PC,您需要将日志文件复制到您的 SD 卡,然后使用 adb pull 检索文件。在 Android 5.0+ 上你可以简单地做:

adb shell exec-out run-as package.name cat files/tablet.log > tablet.log

这应该适用于以前的(和当前的)Android 版本:

> adb shell
$ run-as package.name
$ cp files/tablet.log $EXTERNAL_STORAGE/tablet.log
$ exit
> adb pull /sdcard/tablet.log

显然,将 package.name 替换为您的包名称 (com.tayek.tablet.gui.android.cb7)。


参见:android adb, retrieve database using run-as