场景和思路
我们想在frameworks层读写sdcard,但是直接读写是不行的,提示权限不足。于是就想怎么把它所属的进程找出来,然后给这个进程加sdcard读写权限。
做法
android.os.Process.myPid()
方法可以获取当前代码所在的进程的id。再通过ps|grep [pid]
命令,我们可以知道frameworks中的代码所属system_server进程,而system_server进程又是由Zygote孵化出来的,于是我们在frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
看到startSystemServer
方法,这是启动system_server进程的,其中有–setgroups字符串,这是设置system_server进程的用户组。我们要把它加上sdcard_rw组,和sdcard目录是同一个组的,这样,我们在frameworks也能读写sdcard了。在system/core/include/private/android_filesystem_config.h
可以找到关于sdcard_rw的定义:
#define AID_SDCARD_RW 1015 /* external storage write access */
最后,我们在–setgroups字符串后面加上1015,重新编译frameworks,就可以了。