Android 在/数据上创建文件时拒绝AOSP权限

Android 在/数据上创建文件时拒绝AOSP权限,android,android-source,Android,Android Source,在Android 6.0中,我试图在/data分区:/data/sample/emptyfile的sample文件夹中创建一个空文件 代码从安装在/external File file = new File(/data/sample/emptyfile); try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } 我已为/system/core/libcutils/fs_confi

在Android 6.0中,我试图在/data分区:
/data/sample/emptyfile
sample
文件夹中创建一个空文件

代码从安装在
/external

File file = new File(/data/sample/emptyfile);

try {
    file.createNewFile();
} catch (IOException e) {
    e.printStackTrace();
}
我已为
/system/core/libcutils/fs_config.c

我已尝试添加以下代码变体:

/* Rules for directories.
** These rules are applied based on "first match", so they
** should start with the most specific path and work their
** way up to the root.
*/

static const struct fs_path_config android_dirs[] = {
{ 00777, AID_ROOT, AID_ROOT,     0, "data/sample" },
{ 00770, AID_SYSTEM, AID_CACHE,  0, "cache" },
... etc.

/* Rules for files.
** These rules are applied based on "first match", so they
** should start with the most specific path and work their
** way up to the root. Prefixes ending in * denotes wildcard
** and will allow partial matches.
*/
static const char conf_dir[] = "/system/etc/fs_config_dirs";
static const char conf_file[] = "/system/etc/fs_config_files";

static const struct fs_path_config android_files[] = {
    { 00777, AID_ROOT,      AID_ROOT,      0, "data/sample/*" },
    { 00440, AID_ROOT,      AID_SHELL,     0, "system/etc/init.goldfish.rc" },
    ... etc.
我尝试使用了
AID\u ROOT,AID\u ROOT
AID\u SYSTEM,AID\u SYSTEM

编译时成功创建了文件夹
sample
,根据文件资源管理器,权限为:
drw rw-rw-
(即使我分配了777,也没有执行权限)

但是,在尝试创建文件时,logcat会打印:

02-27 17:33:30.097: W/System.err(1939): java.io.IOException: open failed: EACCES (Permission denied)
02-27 17:33:30.097: W/System.err(1939):     at java.io.File.createNewFile(File.java:939)
02-27 17:33:30.097: W/System.err(1939):     at com.android.incallui.InCallPresenter (...)
02-27 17:33:30.097: W/System.err(1939):     at com.android.incallui.CallList.notifyGenericListeners(CallList.java:541)
02-27 17:33:30.097: W/System.err(1939):     at com.android.incallui.CallList.onUpdate(CallList.java:188)
02-27 17:33:30.098: W/System.err(1939):     at com.android.incallui.Call.update(Call.java:311)
02-27 17:33:30.098: W/System.err(1939):     at com.android.incallui.Call.-wrap0(Call.java)
02-27 17:33:30.098: W/System.err(1939):     at com.android.incallui.Call$1.onDetailsChanged(Call.java:208)
02-27 17:33:30.098: W/System.err(1939):     at android.telecom.Call$4.run(Call.java:1156)
02-27 17:33:30.098: W/System.err(1939):     at android.os.Handler.handleCallback(Handler.java:739)
02-27 17:33:30.098: W/System.err(1939):     at android.os.Handler.dispatchMessage(Handler.java:95)
02-27 17:33:30.098: W/System.err(1939):     at android.os.Looper.loop(Looper.java:148)
02-27 17:33:30.098: W/System.err(1939):     at android.app.ActivityThread.main(ActivityThread.java:5417)
02-27 17:33:30.098: W/System.err(1939):     at java.lang.reflect.Method.invoke(Native Method)
02-27 17:33:30.098: W/System.err(1939):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-27 17:33:30.098: W/System.err(1939):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-27 17:33:30.098: W/System.err(1939): Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
02-27 17:33:30.098: W/System.err(1939):     at libcore.io.Posix.open(Native Method)
02-27 17:33:30.098: W/System.err(1939):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
02-27 17:33:30.098: W/System.err(1939):     at java.io.File.createNewFile(File.java:932)
02-27 17:33:30.098: W/System.err(1939):     ... 16 more
仅仅因为您在Android中拥有DAC(rwx)权限,并不意味着您拥有适当的SELinux权限。因为你得到了一个EACCES,如果你的文件真的是777,我猜你在试图访问它时得到了SELinux拒绝。如果您得到拒绝,Logcat或dmesg应具有avc拒绝

AOSP中的某些地方可能有防护措施,以防止出现世界可写或世界可读的目录或文件。尝试将您的权限降低到合理的程度,例如,对dir的权限为00771,对文件的权限为00644


使文件世界可读或世界可写是一个可怕的、通常是不必要的想法。

谢谢您的输入,对不起,我直到现在才阅读您的答案。解决办法确实是改变西安德罗式的政策。我使用777权限进行调试,以完全排除rwx权限是问题所在的任何可能性。请不要破坏您自己的帖子。