Question

as far as i understand each android process runs in a "sandbox" environment, what happen if an android application is a multi process application? do all processes use the one single sandbox since all the processes use the same user id?

Was it helpful?

Solution

As Android uses the Linux kernel for sanboxing, the real sandbox is per (unix) user id, rather than per process. And the Dalvik VM itself makes no attempt at sandboxing.

Of course proccesses owned by the same user id are somewhat isolated from each other, but tools like kill(), ptrace() and the /proc filesystem which pierce process isolation are available - and governed primarily by user id isolation.

There are a couple of oddities about how code maps to processes however:

  • Either an Activity or a Service can be designated in the manifest to run in a distinct process, but this will still be a process owned by the package user id

  • Distinct application packages with the same signing certificate can use the shared user id feature to share a sandbox; in some cases this can result in their code running in the same process.

  • The multiprocess attribute of the <activity> tag says that the activity could run in the process of whatever starts it - it's not entirely clear if this could mean it would end up running under a foreign userid (an idea that seems more risky for the caller than the callee).

  • The isolatedprocess attribute of the <service> says that it runs the service in an isolated process with "no permissions of its own" - while it doesn't come out and explicitly say so, I suspect this may mean that this would be a process owned by a distinct, minimally privileged user id.

A more definitive explanation on these last two points would be good. Perhaps I'll look at the implementing code when I have more time.

OTHER TIPS

Each process is associated with a separate runtime (JVM) and sandbox in Android.

For example, if you tune couple of your activities to run on a separate processes (to take advantage of having a distinct memory space) then you end up with having 2 sandboxes when you launch the app and have to manage IPC if needed.

Another example is - if you set two different apps to share the same user id then you won't need IPC since they can see each other's data, but that doesn't mean they run on the same process or sandbox. You need to set process attribute of application element in the manifest.

Out of the context, you can also have multiple components belongs to separate apps to easy sharing and saving memory.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top