Date ArchivesAugust 15, 2016

Android has another layer of protection in that it doesn’t give one app access to the resource of another app. This is known as the ‘sandbox’ where every app gets to play in its own sandbox and can’t use another app’s toys! Android does this by giving each app a unique user id (a UID) and by running that app as a separate process with that UID. Only processes with the same UIDs can share resources which, as each ID is uniquely assigned, means that no other apps have permission.

“Like all security features, the Application Sandbox is not unbreakable. However, to break out of the Application Sandbox in a properly configured device, one must compromise the security of the the Linux kernel.” – Google

The Dalvik virtual machine is implemented by Google for the Android OS, and functions as the Interpreter for Java code running on Android devices. It is a process virtual machine, whereby the the underlying Linux kernel of the Android OS spawns a new Dalvik VM instance for every process. Each process in Android has its own Dalvik VM instance. This reduces the chances of multi-application failure if one Dalvik VM crashes. Dalvik uses register based unlike java uses stack based.

How each process gets an instance of the Dalvik VM

When the system boots up, the boot loader loads the kernel into memory and initializes system parameters. Soon after this,

The kernel runs the Init program, which is the parent process for all processes in the system.

The Init program starts system daemons and the very important ‘Zygote’service.

The Zygote process creates a Dalvik instance which will be the parent Dalvik process for all Dalvik VM instances in the system.

The Zygote process also sets up a BSD read socket and listens for incoming requests.

When a new request for a Dalvik VM instance is received, the Zygote process forks the parent Dalvik VM process and sends the child process to the requesting application.

Internal details

Dalvik differs from the Java virtual machine in that it executes Dalvik byte code, and not the traditional Java byte code. There is an intermediary step between the Java compiler and the Dalvik VM, that converts the Java byte code to Dalvik byte code, and this step is taken up by the DEX compiler.

The DEX compiler converts the java .class file into a .dex file, which is of less size and more optimized for the Dalvik VM.