来自pc

时间:2016-05-24 22:35:12

标签: java android java.util.logging

我的6.0.1应用程序在2013年nexus(其中 root)时出现奇怪的行为,因此我尝试将日志文件写入内部存储。我有通过WiFi工作的套接字记录到PC,但问题发生在电源被回收,我的应用程序启动时收到启动完成,所以我想我会写一个日志文件,所以我正在尝试:

    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失败,权限被拒绝

有没有办法将文件送到PC?

感谢

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

另外,adb exec-out run-as package.name cat files / file> file将文件传送到PC。

看起来像一个人需要:adb -s%device%shell run-as%package%ls -l / data / data /%package%/ files

1 个答案:

答案 0 :(得分:3)

/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