Android 9.0怎樣在data下創建多用戶共享目錄

前言

Google 在android M 版本後, 通過SELinux 的neverallow 語法強制性限制了普通進程訪問data 目錄的權限. 嚴禁除init system_server installd system_app 之外的其他進程直接操作/data 目錄比如在data 目錄下面創建文件,寫文件,重命名文件等等.
有很多客戶都會在data 目錄下創建文件, 保存資訊, 在M 版本上這個操作會被SELinux 直接攔截下來,並且沒法直接添加訪問system_data_file 的權限,N版本上更加嚴格, system_app也會被攔截下來。
那麼如何在Android P版本上創建一個公共目錄用於所有用戶放取文件,我們需要修改init的一些參數用於配置

方法

比方說我們需要在data/vendor下創建一個face目錄

1>device/mediatek/xxxx/init.xxxx.rc

write /proc/bootprof "create vendor face dir"
mkdir /data/vendor/face 0777 system system

2>device/mediatek/sepolicy/basic/non_plat/file.te

type face_data_file, file_type, data_file_type;

3>device/mediatek/sepolicy/basic/non_plat/file_context

/data/vendor/face(/.*)? u:object_r:face_data_file:s0

4>device/mediatek/sepolicy/basic/non_plat/platform_app.te

allow platform_app face_data_file:file { create getattr setattr open rw_file_perms };
allow platform_app face_data_file:dir create_dir_perms;

5>device/mediatek/sepolicy/basic/non_plat/system_app.te

allow system_app face_data_file:file { create getattr setattr open rw_file_perms };
allow system_app face_data_file:dir create_dir_perms;
至此我們就創建好了data/vendor/face公共目錄

不過這個方法必須要見到android底層源碼,並且有權限更改的前提下才能進行,對於普通應用來說可以使用

Context.getobbDir()

這個是android對於應用存放obb資源文件創建的共享目錄,只要在其中一個用戶的obb目錄下存放一個文件,其他用戶的obb目錄下便會生成相同的文件,非常適用於multi-user的共享方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章