Introduction to Android

This tutorial gives an introduction to “Android”. It is basically an open-source operating system (OS) for mobile devices developed by Google Inc., which is built upon Linux kernel. Android’s competitors are Apple’s iOS (for iPhone/iPad), RIM Blackberry OS, Symbian OS, Microsoft’s Windows Phone OS, and many other proprietary mobile operating systems.

The latest Android supports Phone/Tablet, TV, Wear (watch and glass), Automobile devices and Internet of Things (IoT).

 

Android Platform

Android is based on Linux with a set of native core C/C++ libraries. Android applications are written in Java. However, they run on Android’s own Java Virtual Machine, called Dalvik Virtual Machine (DVM) (instead of JDK’s JVM) which is optimized to operate on the small and mobile devices. Figure 1 below shows the Android platform architecture.

Android Stack

Figure 1: Android platform architecture

 

Basically, Android apps can be written using Kotlin, Java, and C++ languages. The Android SDK tools compile your code along with any data and resource files into an APK, an Android package, which is an archive file with an .apk suffix. One APK file contains all the contents of an Android app and is the file that Android-powered devices use to install the app.

Each Android app lives in its own security sandbox, protected by the following Android security features:

  • The Android operating system is a multi-user Linux system in which each app is a different user.
  • By default, the system assigns each app a unique Linux user ID (the ID is used only by the system and is unknown to the app). The system sets permissions for all the files in an app so that only the user ID assigned to that app can access them.
  • Each process has its own virtual machine (VM), so an app’s code runs in isolation from other apps.
  • By default, every app runs in its own Linux process. The Android system starts the process when any of the app’s components need to be executed, and then shuts down the process when it’s no longer needed or when the system must recover memory for other apps.

The Android system implements the principle of least privilege. That is, each app, by default, has access only to the components that it requires to do its work and no more. This creates a very secure environment in which an app cannot access parts of the system for which it is not given permission. However, there are ways for an app to share data with other apps and for an app to access system services:

  • It’s possible to arrange for two apps to share the same Linux user ID, in which case they are able to access each other’s files. To conserve system resources, apps with the same user ID can also arrange to run in the same Linux process and share the same VM. The apps must also be signed with the same certificate.
  • An app can request permission to access device data such as the device’s location, camera, and Bluetooth connection. The user has to explicitly grant these permissions.

The rest of this document introduces the following concepts:

  • The core framework components that define your app.
  • The manifest file in which you declare the components and the required device features for your app.
  • Resources that are separate from the app code and that allow your app to gracefully optimize its behavior for a variety of device configurations.

The main site for Android is https://www.android.com. For programmers and developers, visit https://developer.android.com to download the Android Studio SDK, Android Training, API Guides and API documentation.