ODROID MAGAZINE 9
place where all the critical services need to be dened, along with the dependencies
that each service depends on, including the characteristics (user, group, onrestart,
etc) of each service. Failure to run any of the dened services will result in the non-
functioning of Android and any relevant user applications.
Zygote
As we have seen in the previous section, Android starts a number of services that
it depends on, including Zygote. It’s important to note that zygote is a name of the
service that is given in Android for an application that takes care of “running” user
applications through the Dalvik virtual machine, as can be seen from the service
shown below:
service zygote /system/bin/app_process -Xzygote /system/
bin --zygote --start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state
wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
When the service starts up, it will create a local socket that is used by the internal
framework to launch applications. In summary, zygote is a very thin socket-based
layer that takes care of executing user application. All Android applications that you
use on your device (phones, tablets, etc) are all “launched” via zygote, so if zygote is
not operating, your application will not be able to launch in Android.
Let’s see what will happen if you shutdown zygote from the command line. Use
‘adb shell’ to connect to your ODROID-U3 and execute the command stop zygote.
You will immediately see the entire Android stack shut down. To start zygote again,
just type start zygote.
System Services
This is the nal step in the boot process, and is also essential to making life easy
for developers.
These services
are a mixture of
native and Java
code that exist to
fulll the needs
of user applica
-
tions and servic-
es such as USB,
Accelerometer,
Wi and more.
When writing an
Figure 6 : Appli-
cation run from
service com-
mand
TECHNICAL ARTICLE
Android application, you will inevitably
come across these services and use them
either directly or indirectly.
Without services, it would take a
long time and effort to write Android
applications. Imagine a project where
you wanted to write a USB-based appli
-
cation, but there is no service available.
You would need to write a lot of code
both in Java and the native layer for
your application to have access to the
USB ports. You can view the currently
available services by using the com
-
mand service list from the ADB shell.
The class that takes care of the suc
-
cessful running of the services resides at
frameworks/base/services/java/com/
android/server/SystemServer.java. If
you have a hardware project that needs
to provide services to developers, it’s
better to have it running as an Android
service so that the client application
code doesn’t need to be rewritten if the
interface requires updates or changes.
Nanik Tolaram Lives in Sydney with
his wife and 2 boys. His day job is
wrestling with Android source code
- customizing, troubleshooting and en-
hancing it to make sure it works in the
hardware of choice (ARM and x86).
His hobbies include breeding sh, teach-
ing Android and electronics to other
people and making stuff out of wood.
He also runs the Android websites
www.ozandroid.info and kernel.
ozandroid.info