我的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
答案 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
)。