【问题标题】:Android/Linux File Permissions ProblemAndroid/Linux 文件权限问题
【发布时间】:2010-11-17 23:37:01
【问题描述】:

我在我的应用程序的内部存储(/data/data/com.my_app)中创建了一个目录,并通过该方法授予该目录的全局读/写权限

context.getDir(DATA_DIR_NAME, Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);

通过我的app,我验证了linux文件权限是正确的:

drw-rw-rw- app_71 app_71 2010-11-16 18:38 app_data

而且我能够将文件读入/写出目录 app_data 就好了。但是,我的一位开发人员突然无法再写入目录。我们的应用程序也无法访问他设备上的目录。

奇怪的是目录的文件权限还是一样的。我们不能对目录进行任何类型的写入,也不能再读取目录中的任何文件(这些文件之前被授予全局 rw 权限)。

我们唯一能做的就是adb shell ls /data/data/my_app/app_data 来查看我们的文件列表。奇怪地做adb shell ls -l /data/data/my_app/app_data 不会返回任何东西。而且我们也不能CD到目录中。

有没有人知道问题是什么或如何解决这个问题?我们已经束手无策了。

非常感谢。

【问题讨论】:

  • 当您尝试从无法打开的手机访问目录时,日志中是否有任何有用的信息?
  • ADB Shell 命令不会返回任何有用的信息。如果我尝试通过我的应用程序读取/写入目录中的文件,它会引发描述 Permission Denied 的异常。有了目录的 drw-rw-rw- 权限,我希望至少能够写一个文件。除了异常堆栈跟踪之外,没有任何相关内容会打印在 logcat 中。

标签: android linux permissions adb


【解决方案1】:

目录需要设置执行 (X) 位才能访问目录的内容。我不知道android模式,但是寻找MODE_WORLD_EXECUTABLE,看看你是否可以设置。

基本上,您需要模式 0777 (rwxrwxrwx) 才能以所有权限全局访问目录。

ls 起作用的原因是您有权读取目录中的文件名。 ls -l 不起作用,因为您无法访问目录中的文件以获取 -l 将打印的元数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    相关资源
    最近更新 更多