1. 程式人生 > >Android frameworks層讀寫sdcard

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,就可以了。