Android frameworks层读写sdcard

场景和思路

我们想在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,就可以了。

参考:https://blog.csdn.net/smilefyx/article/details/78880428

猜你喜欢

转载自blog.csdn.net/e_one/article/details/80620423
今日推荐