Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我无法在android应用程序中获得正确的文件权限?_Android_Embedded Linux_Android Sdcard_Mount - Fatal编程技术网

为什么我无法在android应用程序中获得正确的文件权限?

为什么我无法在android应用程序中获得正确的文件权限?,android,embedded-linux,android-sdcard,mount,Android,Embedded Linux,Android Sdcard,Mount,我正在将新的Android4.2移植到我们自己的硬件上。 我们使用vold将mmc的一个分区挂载到/mnt/sdcard并关闭多用户功能。 在终端中,我们可以找到具有0777权限的SD卡。 但当我们使用诸如“es文件管理器”之类的android应用程序浏览/mnt/sdcard时,它会敬酒“没有安装sdcard” 然后,我尝试测试它,并编写一个小程序。当我尝试访问该文件时,它返回权限0000,这是在我们挂载分区之前由init.rc定义的 在vold.fstab中 dev_mount sdcard

我正在将新的Android4.2移植到我们自己的硬件上。 我们使用vold将mmc的一个分区挂载到/mnt/sdcard并关闭多用户功能。 在终端中,我们可以找到具有0777权限的SD卡。 但当我们使用诸如“es文件管理器”之类的android应用程序浏览/mnt/sdcard时,它会敬酒“没有安装sdcard”

然后,我尝试测试它,并编写一个小程序。当我尝试访问该文件时,它返回权限0000,这是在我们挂载分区之前由init.rc定义的

在vold.fstab中

dev_mount sdcard /mnt/sdcard 1 /devices/platform/ns115-sdmmc.0/mmc_host/mmc1
在init.xxx.rc中

   export EXTERNAL_STORAGE /mnt/sdcard                                                             
   mkdir /mnt/sdcard 0000 system system
   symlink /mnt/sdcard /sdcard
在vold中,我们使用fstypevfat将mmc磁盘装入/mnt/sdcard,并授予权限0777,uid=system gid=sdcard\u rw

看看这些坐骑:

rootfs / rootfs rw 0 0
/dev/root / ext3 rw,relatime,errors=continue,barrier=0,data=writeback 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
tmpfs /mnt/secure tmpfs rw,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/block/vold/179:1 /mnt/sdcard vfat   rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0000,dmask=0000,allow_ut0
/dev/block/vold/179:1 /mnt/secure/asec vfat    rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0000,dmask=0000,al0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
我尝试以下测试:

  • 使用应用访问/mnt/sdcard失败,权限被拒绝
  • 使用本机服务对0777执行相同的测试成功
  • 在终端中,使用0777检查/mnt/SD卡是否成功

  • 所以我想知道它是否与应用程序的符号有关?

    也许您需要一个正确的init.rc文件,该文件必须位于android4.2中,如果您的init.rc位于android4.1中,您可以添加以下内容: #装载共享名称空间,以便将更改传播到子名称空间 挂载rootfs rootfs/shared rec 安装tmpfs tmpfs/mnt/secure private rec

    #创建专用装载点,以便我们可以从暂存移动
    安装tmpfs tmpfs/mnt/secure mode=0700,uid=0,gid=0

    请发布logcat和dmesg日志。您如何在终端中测试访问?在被拒绝的情况下,如何从应用程序错误消息中获取unix文件权限代码?您是否研究过在android 4.x中执行读SD卡权限的可能性。我使用minicom将设备与root用户连接。2.我使用lstat获取s_模式标志。当我调用opendir时,它返回errno 13(EACCES)3。4.1和4.2之间的唯一区别是“多用户”功能,我已经尝试使用fuse和sdcard服务在init过程中挂载SD卡,并且成功了。所有应用程序都可以看到SD卡。但我仍然不知道为什么zygote分叉的应用程序看不到vold挂载的SD卡,这也是一个根用户进程。这可能与4.2maybe中的每个用户SD卡有关,你知道实现在哪里吗?