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

时间:2012-11-30 05:23:40

标签: android embedded-linux android-sdcard mount

我将新的Android4.2移植到我们自己的硬件上。 我们使用vold将mmc的分区挂载到/ mnt / sdcard并关闭多用户功能。 在终端,我们可以找到具有0777权限的SD卡。 但是当我们使用Android应用程序时,例如" es文件管理器"要浏览/ mnt / sdcard,它就会播放"没有安装sdcard"

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

in 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中,我们使用fstype vfat将mmc磁盘挂载到/ mnt / sdcard并赋予权限0777,并且uid = system gid = sdcard_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

我尝试这些测试:

  1. 使用app访问/ mnt / sdcard失败,权限被拒绝0000
  2. 使用本机服务使用0777
  3. 执行相同的测试成功 终端中的
  4. 使用0777
  5. 检查/ mnt / sdcard是否成功

    所以我想知道它是否与应用程序的标志有关系?

1 个答案:

答案 0 :(得分:0)

也许你需要一个正确的init.rc文件,它必须在android4.2中,如果你的init.rc在andrdroid4.1中,你可以添加这个:  #mount shared使更改传播到子命名空间     mount rootfs rootfs / shared rec     mount tmpfs tmpfs / mnt / secure private rec

#创建私有安装点,以便我们可以从暂存中获取MS_MOVE     mount tmpfs tmpfs / mnt / secure mode = 0700,uid = 0,gid = 0