1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| skinparam backgroundColor #EEEBDC
skinparam sequence { ArrowColor DeepSkyBlue ActorBorderColor DeepSkyBlue LifeLineBorderColor blue LifeLineBackgroundColor #A9DCDF ParticipantBorderColor DeepSkyBlue ParticipantBackgroundColor DodgerBlue ParticipantFontName Impact ParticipantFontSize 17 ParticipantFontColor #A9DCDF ActorBackgroundColor aqua ActorFontColor DeepSkyBlue ActorFontSize 17 ActorFontName Aapex }
autoactivate on pkms -> SMS: prepareSandboxForApp\n(pkg.packageName, appId,\n pkg.mSharedUserId, userId); SMS->SMS: getSandboxId\n(packageName, sharedUserId); return sandboxId note left: packageName || "shared-" + packageName SMS -> vold: <b>prepareSandboxForApp\n(packageName, appId, \n sandboxId, userId) vold -> VM: prepareSandboxForApp alt hasIsolatedStorage VM->VM: hasIsolatedStorage note left:"sys.isolated_storage_snapshot" true || "persist.sys.isolated_storage" true else VM-->pkms:end end
VM->VM:verify package return VM->VM:<b>prepareSandboxes\n(userId, {packageName}, visibleVolLabels) VM->VM:prepareSubDirs note left:<b>sandboxRoot:\n/mnt/runtime/write/<vlable>Android/sandbox/ return
VM->VM:prepareSandboxTargets\n(userId, visibleVolLabels) note left:<b>mntTargetRoot:\n/mnt/user/<userid>/package\n\ <b>sandboxTarget:\n/mnt/user/<userid>/package/<vlabel>/<userid>\n\ <b>primaryPath</b>(/stor**age/emulated/<userid>) <b>-></b> $mntTargetRoot/self/primary return
VM->VM:mountPkgSpecificDirsForRunningProcs\n(userId, packageNames, \n visibleVolLabels, -1) note left:obbMountDir:\n\ /mnt/user/<userId>/obb_mount\n\ <b>read /proc/<pid>/ns/mnt \n\ setns(nsFd.get(), CLONE_NEWNS VM->VM:getMountModeForRunningProc note left: <b>stat("/storage", &storageSb) \n\ vs stat("/mnt/runtime/full", &mntFullSb) -> <b>REMOUNT_MODE_FULL \n\ vs stat("/mnt/runtime/write", &mntWriteSb) -> <b>REMOUNT_MODE_LEGACY \n\ obbMountFile: "/mnt/user/<userid>/obb_mount/package" <b> \n\ <b>obbMountFile exist -> REMOUNT_MODE_INSTALLER \n\ vs /mnt/user/<userid>/package-><b>REMOUNT_MODE_WRITE return mountmode
alt mountMode == remountMode VM->VM:handleMountModeInstaller return 0 end
alt REMOUNT_MODE_FULL || REMOUNT_MODE_LEGACY || REMOUNT_MODE_NONE VM->pkms:end else REMOUNT_MODE_INSTALLER || REMOUNT_MODE_WRITE VM->VM ++ : mount note left #LightBlue:mntSource: /mnt/runtime/write/<vlabel>/<userid> (for emulated)\n\ mntTarget: /storage/<vlabel>/<userid> (storage/emulated/0) \n\ sandboxSource: $mntSource/Android/sandbox/<sandboxid> \n\ <b>$sandboxSource <b>-></b> $mntTarget \n\ obbSourceDir: $mntSource/Android/obb \n\ obbTargetDir: $mntTarget/Android/obb \n\ REMOUNT_MODE_INSTALLER: $obbSourceDir <b>-></b> $obbTargetDir \n\ REMOUNT_MODE_WRITE: $mntSource/Android/data|media/<package>/ <b>-></b> $mntTarget/Android/data|media/<package>/ \n\ $mntSource/Android/data|media/<package>/ <b>-></b> $mntTarget/Android/data|media/<package>/ return VM->pkms:end end
|