android app无法访问sdcard,提示permission deny

onlinedj 发布于 2012/11/30 13:50
阅读 4K+
收藏 0

我在porting android4.2到公司的板子上

默认4.2使用fuse将/data/media挂载到/mnt/sdcard.

我现在使用的是老一套的vold挂载。

我现在出现的问题是:上层app无法访问sdcard,因为获得的文件权限是0000

而native service,终端中,都可以正确获得权限0777(为了方便,我在挂载时设置了0777权限)


这说明上层访问时得到的文件夹权限还是init.rc中设置的0000。

具体如下:



in vold.fstab

dev_mount sdcard /mnt/sdcard 1 /devices/platform/ns115-sdmmc.0/mmc_host/mmc1

in init.xxx.rc

 export EXTERNAL_STORAGE /mnt/sdcard                                          mkdir /mnt/sdcard 0000 system system
 symlink /mnt/sdcard /sdcard 

mount命令的输出:

/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






加载中
0
onlinedj
onlinedj
问题的解决方法已经搞定,就是在4.2的时候加入了多用户,mount的动作必须在init.rc中进行,也就是由init程序挂载。而不是vold。
0
北京d路飞
北京d路飞

native可以了,说明驱动没问题。
再往上查一下Framework的Service里能不能读写。
如果Java和native通了,再查应用读写。

可能是应用问题,本身没有声明权限,也可能被安全应用拦截了,或者fs异常返回了。。
具体跟踪一下是在哪一层返回deny的。

北京d路飞
北京d路飞
回复 @onlinedj : 以解决了啊,Good.
北京d路飞
北京d路飞
回复 @onlinedj : "上层文件管理器一般都是调用Java的File类,这个类在dalvik中直接使用opendir,结果是opendir返回permission deny ",opendir接口里应该没有checkpermission的判断。是否可以跟踪一下在哪里checkpermission了,从这里入手看什么原因拒绝了。
onlinedj
onlinedj
问题在于:terminal中访问都是正常的。native service也正常。 就是普通上层app的进程中访问的都返回EACCES。当我把init.rc中的mkdir /mnt/sdcard 的permission设置为0777,上层也能访问到了,但是跟我实际的sdcard的分区不是一个了。上层看到的和底层看到的东西不同。
onlinedj
onlinedj
你好,我native的c code直接调用opendir没有问题,上层文件管理器一般都是调用Java的File类,这个类在dalvik中直接使用opendir,结果是opendir返回permission deny
0
hai121212
hai121212

onlinedj,你好.

你现在已经不使用vold的方式来挂载sd卡了?如果不使用vold,如何响应sd卡的插入和拔出的动作?

返回顶部
顶部