Friday, December 2, 2011

The Android Stack

Do you want to know the secrets of Android Mobile Programming and Development and use it for the advancement of your career in IT? Do you have problems in your thesis or research about Mobile apps or games? Here is an instant solution for your problem. Avail the Android Mobile Programming and Development Training package of Prof Erwin Globio and get free tips about Android Mobile Platform Secrets. For more free information about Android and Android Training visit the following sites: http://erwinglobio.sulit.com.ph/http://erwinglobio.multiply.com/ http://erwinglobio.wordpress.com/. You may contact the Android Trainer at 09393741359 or 09323956678. Call now and be one of the Android Experts



The Stack

This is the 9,000-foot overview of the Android platform. Although you’re concerned
primarily with writing Android applications, understanding the layout of the system
will help shape your understanding about what you can or cannot do easily with
Android.
By the end of this chapter, you’ll understand how the whole system works, at least from
the high level.
Stack Overview
The Android operating system is like a cake consisting of various layers. Each layer has
its own characteristics and purpose. The layers are not cleanly separated but often seep
into each other.
When you read through this chapter, keep in mind that I am concerned only with the
big picture of the entire system and will get into the nitty-gritty details later on. Figure 2-1 shows the parts of the Android stack.
Linux
Android is built on top of Linux. Linux is a great operating system and the poster child
of open source. There are many good reasons for choosing Linux as the base of the
Android stack. Some of the main ones are its portability, security, and features.
Portability
Linux is a portable platform that is relatively easy to compile on various hardware
architectures. What Linux brings to Android is a level of hardware abstractions. By
basing Android on Linux, we don’t have to worry too much about underlying hardware
features. Most low-level parts of Linux have been written in fairly portable C code,
which allows for third parties to port Android to a variety of devices.

Security
Linux is a highly secure system, having been tried and tested through some very harsh
environments over the decades. Android heavily relies on Linux for security. All An-
droid applications run as separate Linux processes with permissions set by the Linux
system. As such, Android passes many security concerns to the underlying Linux
system.



Features
Linux comes with a lot of very useful features. Android leverages many of them, such
as support for memory management, power management, and networking.

Native Libraries
The native libraries are C/C++ libraries, often taken from the open source community
in order to provide necessary services to the Android application layer. Among others,
they include:
Webkit
 A fast web-rendering engine used by Safari, Chrome, and other browsers
SQLite
   A full-featured SQL database
Apache Harmony
   An open source implementation of Java
OpenGL
   3D graphics libraries
OpenSSL
   The secure locket layer
Although many of these libraries are used as-is, one notable exception is Bionic, which
is basically a rewritten version of the standard C library. Bionic is used for two reasons:
Technology
    To make it purpose-built for tiny, battery-powered devices
License
    To make it license-friendly for others who might want to adopt it and change it
GNU libc, the default C library for Linux, is licensed under a GPL li-
cense, which requires any changes that you release publicly to be pushed
back to the open source community. As such, it might not be the most
business-friendly open source license when a company wants to keep
their derivative work proprietary. Bionic, on the other hand, is licensed
under an Apache/MIT license, which doesn’t require derivative works
to be open sourced.

Dalvik
Dalvik is a purpose-built virtual machine designed specifically for Android, developed
by Dan Bornstein and his team at Google.
The Java virtual machine (VM) was designed to be a one-size-fits-all solution, and the
Dalvik team felt they could do a better job by focusing strictly on mobile devices. They
looked at which constraints specific to a mobile environment are least likely to change
in the near future. One of these is battery life, and the other is processing power. Dalvik
was built from the ground up to address those constraints.

Another side effect of replacing the Java VM with the Dalvik VM is the licensing.
Whereas the Java language, Java tools, and Java libraries are free, the Java virtual ma-
chine is not. This was more of an issue back in 2005 when the work on Dalvik started.
Nowadays, there are open source alternatives to Sun’s Java VM, namely the
OpenJDK and Apache Harmony projects.
By developing a truly open source and license-friendly virtual machine, Android yet
again provides a full-featured platform that others are encouraged to adopt for a variety
of devices without having to worry about the license.

Android and Java
In Java, you write your Java source file, compile it into a Java byte code using the Java
compiler, and then run this byte code on the Java VM. In Android, things are different.
You still write the Java source file, and you still compile it to Java byte code using the
same Java compiler. But at that point, you recompile it once again using the Dalvik
compiler to Dalvik byte code. It is this Dalvik byte code that is then executed on the
Dalvik VM. Figure 2-2 illustrates this comparison between standard Java (on the left)
in Android using Dalvik (on the right).

It might sound like you have to do a lot more work with Android when
it comes to Java. However, all these compilation steps are automated
by tools such as Eclipse or Ant, and you never notice the additional
steps.
You may wonder, why not compile straight from Java into the Dalvik byte code? There
are a couple of good reasons for the extra steps. Back in 2005, when work on Dalvik
started, the Java language was going through frequent changes, but the Java byte code
was more or less set in stone. So, the Android team chose to base Dalvik on Java byte
code instead of Java source code.
A side effect of this is that in theory you could write Android applications in any other
language that compiles down to Java byte code. For example, you could use Python or
Ruby. I say “in theory” because in practice the appropriate libraries that are part of the
SDK would need to be available. But it is likely that the open source community will
come up with a solution to that in the future.
Another thing to keep in mind is that Android Java is a nonstandard collection of Java
classes. Java typically ships in:
Java Standard Edition
    Used for development on basic desktop-type applications
Java Enterprise Edition (aka J2EE or JavaEE)
    Used for development of enterprise applications
Java Micro Edition (aka J2ME or JavaME)
    Java for mobile applications
Android’s Java set of libraries is closest to Java Standard Edition. The major difference
is that Java user interface libraries (AWT and Swing) have been taken out and replaced
with Android-specific user interface libraries. Android also adds quite a few new fea-
tures to standard Java while supporting most of Java’s standard features. So, you have
most of your favorite Java libraries at your disposal, plus many new ones.
Application Framework
The application framework is a rich environment that provides numerous services to
help you, the app developer, get your job done. This is the best-documented and most
extensively covered part of the platform because it is this layer that empowers devel-
opers to get creative and bring fantastic applications to the market.
In the application framework layer, you will find numerous Java libraries specifically
built for Android. You will also find many services (or managers) that provide the eco-
system of capabilities your application can tap into, such as location, sensors, WiFi,
telephony, and so on.


As you explore Android application development, most of your focus will be on this
part of the stack, and you will get to use many of the application framework
components.
Applications
And finally, there are the applications that you and other developers create. These
applications are what end users find valuable about Android. They can come prein-
stalled on the device or can be downloaded from one of the many Android markets.

The APK
An application is a single application package (APK) file. An APK file roughly has three
main components. An API consists of the following major components:
Dalvik executable
    This is all your Java source code compiled down to a Dalvik executable. This is the
    code that runs your application.
Resources
    Resources are everything that is not code. Your application may contain a number
    of images and audio/video clips, as well as numerous XML files describing layouts,
    language packs, and so on. Collectively, these items are the resources.
Native libraries
    Optionally, your application may include some native code, such as C/C++ li-
    braries. These libraries could be packaged together with your APK file.

Application Signing
Android applications must be signed before they can be installed on a device. For de-
velopment purposes, we’ll be signing our example applications with a debug key—a
key that you already have on your development platform. However, when you distrib-
ute your application commercially, you’ll want to sign it with your own key. The
Android developer document titled “Signing Your Application” has the details.

Application Distribution
One way in which Android is quite different from other platforms is the distribution
of its apps. On most other platforms, such as iPhone, a single vendor holds a monopoly
over the distribution of applications. On Android, there are many different stores, or
markets. Each market has its own set of policies with respect to what is allowed, how
the revenue is split, and so on. As such, Android is much more of a free market space
in which vendors compete for business.

In practice, the biggest market currently is Android Market, run by Google. It is unclear
whether Google means to just seed the market space while other stores develop or plans
to make it a profitable venture.
Applications can also be distributed via the Web. When you download an APK file
from a website through the browser, the application represented by the APK file is
installed automatically on your phone.
What about viruses, malware, spyware, and other bad things?
With its decentralized application distribution system, it is certainly possible for an
unsuspecting user to download a malicious app that consequently does bad things. For
example, there have been reports of phishing attacks via fake banking apps.
So, Android leaves it to the marketplace to sort it out. Eventually, there will be stores
that are more reputable and those that are less so, at least in theory. Google relies on
user reports for policing its Android Market, but other stores may choose to do more
proactive testing and raise the bar on what gets into the store in the first place.





Do you want to know the secrets of Android Mobile Programming and Development and use it for the advancement of your career in IT? Do you have problems in your thesis or research about Mobile apps or games? Here is an instant solution for your problem. Avail the Android Mobile Programming and Development Training package of Prof Erwin Globio and get free tips about Android Mobile Platform Secrets. For more free information about Android and Android Training visit the following sites: http://erwinglobio.sulit.com.ph/http://erwinglobio.multiply.com/ http://erwinglobio.wordpress.com/. You may contact the Android Trainer at 09393741359 or 09323956678. Call now and be one of the Android Experts