下面我来讲解一下为什么“系统应用不能访问sdcard”以及Android这样设计的原因。
1.为什么系统应用不能访问sdcard?
我们使用ls命令可以看到文件系统中一下内容的权限如下:
130|root@android:/ # ls -l /mnt/
drwxr-xr-x root system 1970-01-01 08:00 asec
drwxr-xr-x root system 1970-01-01 08:00 obb
drwx—— root root 1970-01-01 08:00 secure
d—rwxr-x system sdcard_rw 1970-01-01 08:00 sdcard (这是一种拥有者权限最低的特殊情况)
从上面可以看到sdcard目录所述用户是system,所属组是sdcard_rw。并且其目录权限是d—rwxr-x,那么这是什么意思呢?首先d标示sdcard是一个目录文件,—是system用户的对sdcard目录的权限,即没有任何的读写执行权限。这是典型的拥有者权限最低的情况。rwx是非system用户,sdcard_rw组用户对sdcard目录权限,即有读写和可可执行权限。这也就是为什么非系统应用在AndroidManifest.xml中添加如下的权限之后,便可访问sdcard。
android:name=”android.permission.WRITE_EXTERNAL_STORAGE”
添加该permission之后,应用就会被加到sdcard_rw组,也就拥有了rwx权限。r-x是非system用户,非sdcard_rw组用户对sdcard目录的权限,及读和执行权限。
2.Android为什么要这样做呢?
Because if the SD card gets unmounted it may need to kill any processes that have files open on it and we don’t want system processes being killed like that. If you want to access the SD card, you need to not use the system shared user ID.