- sdcard的隔离,在一键新机的系统中可以做到数据的隔离作用,防止应用在Sdcard上存储数据内容。
- 了解此过程,可以在一键新机,自动化系统中隔离sdcard和data等相关目录。
- 我们开发了一套全自动化的一键新机系统,从底层修改rom,修改了高达80多项参数,可以做到一键备份,还原,全自动化操作,可以过市场上主流应用的检测,包括微信、抖音、陌陌、亚马逊等,有需要了解的可以私信。
用户data目录sdcard目录创建流程:
- 1、SystemServiceManager通知所有注册的Service,onStartUser.
- 2、 /data/user/10目录,在startUser时已经创建
- 3、MountService通过NativeDaemonConnector.execute创建新的用户存储目录/storage/emulated/10
- 4、execute 命令发送到Vold进程中 CommandListener 处理
mConnector.execute("volume", "user_started", userId);
- 5、CommandListener::VolumeCmd::runCommand处理命令
VolumeManager *vm = VolumeManager::Instance();
if (cmd == "user_started" && argc > 2) {
// user_started [user]
return sendGenericOkFail(cli, vm->onUserStarted(atoi(argv[2])));
}
- 6、VolumeManager 创建用户目录
int VolumeManager::onUserStarted(userid_t userId) {
// Note that sometimes the system will spin up processes from Zygote
// before actually starting the user, so we're okay if Zygote
// already created this directory.
std::string path(StringPrintf("%s/%d", kUserMountPath, userId));
fs_prepare_dir(path.c_str(), 0755, AID_ROOT, AID_ROOT);
mStartedUsers.insert(userId);
if (mPrimary) {
linkPrimary(userId);
}
return 0;
}
主要参考文献:
深入理解Android系统多用户
Android之vold进程启动源码分析
Android Service之MountService源码分析