When first exploring a new culture, it is important to learn their language, their method of communication. Oftentimes grunts and hand-gestures won’t suffice, nor will speaking louder and slower. To navigate in this new culture you must know how to communicate with it, or else you could look like a fool, or worse a tourist.
Android, like any sub-culture, has its own words, phrases and imagery – from ‘.apk’ to ‘underclocking’ it’s a virtual alphabet soup. So let this guide be your spoon as we help you navigate through this sub-culture, and help you to explain what you want to say clearly and succinctly.
Definitions referenced from the Android Developers Guide or the FreeYourAndroid.com dictionary.
Android application package file. Each Android application is compiled and packaged in a single file that includes all of the application’s code (.dex file), resources, assets, and manifest file. The application package file can have any name but must use the .apk extension. For example: myExampleAppname.apk. For convenience, an application package file is often referred to as an “.apk”.
Dalvik Executable. Compiled Android application code file. Android programs are compiled into .dex files, which are in turn zipped into a single .apk file on the device. .dex files can be created by automatically translating compiled applications written in the Java programming language.
An action is a description of something that an Intent sender wants done. An action is a string value assigned to an Intent. Action strings can be defined by Android or by a third-party developer. For example, android.intent.action.VIEW for a Web URL, or com.example.rumbler.SHAKE_PHONE for a custom application to vibrate the phone.
An activity is a single screen in an application, with supporting Java code, derived from the Activity class. Most commonly, an activity is visibly represented by a full screen window that can receive and handle UI events and perform complex tasks, because of the Window it uses to render its window. Though an Activity is typically full screen, it can also be floating or transparent.
Android Debug Bridge, a command-line debugging application included with the SDK. It provides tools to browse the device, copy tools on the device, and forward ports for debugging. If you are developing in Eclipse using the ADT Plugin, adb is integrated into your development environment.
Every application must have an AndroidManifest.xml file (with precisely that name) in its root directory of the source tree. The manifest presents essential information about the application to the Android system, information the system must have before it can run any of the application’s code.
From a component perspective, an Android application consists of one or more activities, services, listeners, and intent receivers. From a source file perspective, an Android application consists of code, resources, assets, and a single manifest. During compilation, these files are packaged in a single file called an application package file (.apk).
In contrast to other Linux-based operating systems, Android has a boot partition (containing the contents of a boot.img file), as opposed to a direct-booting system. This partition contains a read-only ‘ramdisk’, and a couple of other files. The ramdisk contains files critical to booting, such as init.rc and default.prop. This ‘partition’ actually sets up the directory structure of the device, having empty folders for /data, /dev, /proc, /sbin, /sys and /system.
The bootloader, is firmware on the phone which runs on every startup. Sometimes it may be desirable to change the version of the bootloader, or to load a different bootloader entirely to enable different features or a completely different OS. The current version of the bootloader can be viewed by entering bootloader mode, the process of which is different for each and every device or manufacturer.
An application class that listens for Intents that are broadcast, rather than being sent to a single target application/activity. The system delivers a broadcast Intent to all interested broadcast receivers, which handle the Intent sequentially.
A drawing surface that handles compositing of the actual bits against a Bitmap or Surface object. It has methods for standard computer drawing of bitmaps, lines, circles, rectangles, text, and so on, and is bound to a Bitmap or Surface. Canvas is the simplest, easiest way to draw 2D objects on the screen. However, it does not support hardware acceleration, as OpenGL ES does. The base class is Canvas.
A data-abstraction layer that you can use to safely expose your application’s data to other applications. A content provider is built on the ContentProvider class, which handles content query strings of a specific format to return data in a specific format.
The Android platform’s virtual machine. The Dalvik VM is an interpreter-only virtual machine that executes files in the Dalvik Executable (.dex) format, a format that is optimized for efficient storage and memory-mappable execution. The virtual machine is register-based, and it can run classes compiled by a Java language compiler that have been transformed into its native format using the included “dx” tool. The VM runs on top of Posix-compliant operating systems, which it relies on for underlying functionality (such as threading and low level memory management). The Dalvik core class library is intended to provide a familiar development base for those used to programming with Java Standard Edition, but it is geared specifically to the needs of a small mobile device.
The data partition on the device contains the user-related data, such as installed applications and settings for those apps, as well as your SQLite database containing Android settings and messages. Normally, the directory /data/app is off-limits through the ‘adb shell’ command, as well as other terminal applications that can run on the device, since this directory contains the apk files for apps. On a rooted phone, using the ‘su’ command will allow full access to this partition. This partition can be flashed using Fastboot or Nandroid.
Dalvik Debug Monitor Service, a GUI debugging application included with the SDK. It provides screen capture, log dump, and process examination capabilities. If you are developing in Eclipse using the ADT Plugin, DDMS is integrated into your development environment.
Deodex is the process of combining the already optimized application elements found in the .odex file and compressing them into the .apk file with the rest of the application. The main reason for doing this allows for application and ROM themers to edit the graphics and settings in the application, whereas they would be unable to in the .odex file. There is really no reason to deodex an application and/or ROM other than to allow theming or other modifications of an application which you do not have access to the sources of.
A floating window that that acts as a lightweight form. A dialog can have button controls only and is intended to perform a simple action (such as button choice) and perhaps return a value. A dialog is not intended to persist in the history stack, contain complex layout, or perform complex actions. Android provides a default simple dialog for you with optional buttons, though you can define your own dialog layout. The base class for dialogs is Dialog.
A compiled visual resource that can be used as a background, title, or other part of the screen. A drawable is typically loaded into another UI element, for example as a background image. A drawable is not able to receive events, but does assign various other properties such as “state” and scheduling, to enable subclasses such as animation objects or image libraries. Many drawable objects are loaded from drawable resource files — xml or bitmap files that describe the image. Drawable resources are compiled into subclasses of android.graphics.drawable.
Fastboot is a means which allows the user to execute or Flash an img file to their device. Some devices and/or bootloaders allow this access, while others do not. All Nexus branded devices allow such access when unlocked.
Flashing is the process of writing data to the internal memory on your phone. Normally, you would flash a ROM image to the phone, which would give you a different version of system software on your phone. Flashing can also refer to updating/writing to any of the other parts of the phone, such as the SPL, Radio etc.
Flash memory, also known as NAND memory, is nonvolatile – keeping information even when the device is off. Flash memory in the device is equivalent to the hard drive in a computer. This is where the device’s operating system (sometimes called firmware) and applications are stored. Flash memory is slower than RAM, but is (almost always) faster than SD cards.
While in adb (see ADB), type in “adb logcat > logcat.txt”. This will help you when resolving issues and bugs. There are also tools in the market you can use for this, one of which is called aLogcat. It can show different categories (severity of errors ect.) too, which is something adb logcat cannot do.
Market (also Play Store)
The market on Android is a place where you can purchase or download applications for your phone. When you download through the market, the installation process is transparent (as in you don’t have to deal with the APK files yourself), and there is the facility to rate apps and post comments which are visible to other users. Frequently, the developers of apps actually take onboard the feedback in the comments (mainly the smaller apps with slightly less feedback to sift through).
When an app is installed from the market, it is copied to ‘/data/app/apkname.apk’, as the act of ‘installing’. An app can store its data in the folder ‘/data/data/apkname’. It is possible to clear the data stored by an application by using the Manage Applications feature in Settings | Applications | Manage Applications.
A message object that you can use to launch or communicate with other applications/activities asynchronously. An Intent object is an instance of Intent. It includes several criteria fields that you can supply, to determine what application/activity receives the Intent and what the receiver does when handling the Intent. Available criteria include the desired action, a category, a data string, the MIME type of the data, a handling class, and others. An application sends an Intent to the Android system, rather than sending it directly to another application/activity. The application can send the Intent to a single target application or it can send it as a broadcast, which can in turn be handled by multiple applications sequentially. The Android system is responsible for resolving the best-available receiver for each Intent, based on the criteria supplied in the Intent and the Intent Filters defined by other applications.
A filter object that an application declares in its manifest file, to tell the system what types of Intents each of its components is willing to accept and with what criteria. Through an intent filter, an application can express interest in specific data types, Intent actions, URI formats, and so on. When resolving an Intent, the system evaluates all of the available intent filters in all applications and passes the Intent to the application/activity that best matches the Intent and criteria.
An XML file that describes the layout of an Activity screen.
An XML file that each application must define, to describe the application’s package name, version, components (activities, intent filters, services), imported libraries, and describes the various activities, and so on.
Nandroid is used to backup or restore backups from Recovery. You can chose to either do a regular backup (Phone only) or a backup + sd-ext (Phone + Apps2sd ext.)Both will backup your whole system, the second will include apps saved on your sdcard’s sd-ext.
Nine-patch / 9-patch / Ninepatch image
A resizeable bitmap resource that can be used for backgrounds or other images on the device.
Odex stands for “Optimized Dalvik Executable” file. The Android system, as identified above, utilizes compressed data stored in the .apk file at runtime. To speed up this process, the most critical elements of application will be placed uncompressed in an .odex file, thus enabling the Android OS to quickly interpret that important information before it continues to parse the rest of the application. Stock ROMs will come from the manufacturer as “odexed”, meaning that the application(s) will have a .apk file and an .odex file, i.e. Calendar.apk and Calendar.odex.
Android provides OpenGL ES libraries that you can use for fast, complex 3D images. It is harder to use than a Canvas object, but better for 3D objects. The android.opengl and javax.microedition.khronos.opengles packages expose OpenGL ES functionality.
The Radio on a mobile phone is the part of the phone that deals with mobile connections. It handles talking to the CDMA/GSM/LTE/3G/4G network, Bluetooth, WiFi and GPS. The radio contains software that controls how it operates, and newer versions of radio firmware are made available from time to time via system updates. These updates are transparent to the user, although users who elect to install custom software can update their radio using an update.zip file made available by members of the modding community.
Flashing the radio is potentially risky, and you should NEVER pull the battery out of a phone that is flashing the radio. If you do so, it is possible your phone will be bricked. Nevertheless, it can give improved battery life, signal strength and data performance, so is often done by users moving to later versions of ROMs. Care should be taken to only flash the correct type of radio to a phone. NEVER attempt to flash a CDMA phone with a GSM radio or vice-versa. It is likely you will brick the phone if you attempt to do so.
The recovery partition is a boot-mode for your phone that allows you to wipe your settings from the Data partition of the phone (a hard wipe), or perform an update using an update.zip file on the root of the microSD card. It is common (although not necessary) to flash a patched Recovery image, such as TWRP or ClockworkMod Recovery. This allows you to run Nandroid backup from the device, and flash modifications, such as files to the device, essentially becoming a means to install software to the device. Recovery mode is separate from ‘normal’ mode, and can be entered by holding down home whilst turning the phone on.
Nonprogrammatic application components that are external to the compiled application code, but which can be loaded from application code using a well-known reference format. Android supports a variety of resource types, but a typical application’s resources would consist of UI strings, UI layout components, graphics or other media files, and so on. An application uses resources to efficiently support localization and varied device profiles and states. For example, an application would include a separate set of resources for each supported local or device type, and it could include layout resources that are specific to the current screen orientation (landscape or portrait). The resources of an application are always stored in the res/* subfolders of the project.
ROM is literally “read-only memory” but its usage has changed over time. Today ROM can refer to the non-volatile area of a device’s flash memory on which read-only data resides or the packed image to be written to that flash area.
Root is the name of the highest level superuser (su) on Unix-like systems such as Android. The root user, and applications run by the root user, have administrative access to protected files and services which makes it dangerous for normal daily use.
A ‘rooted’ device is one which has been hacked to provide privilege escalation from a standard user to superuser. Rooting a device is usually the first step in installing cooked ROMs.
This refers to an unlocked/locked NAND drive. HTC locks the NAND on their phones to prevent writing to the system partition. S-OFF can generally be obtained by an exploit, by flashing an engineering SPL, or by using a process put in place by HTC.
An object of class Service that runs in the background (without any UI presence) to perform various persistent actions, such as playing music or monitoring network activity.
The Secondary Program Loader is a piece of bootcode that initiates the startup of the phone, displaying the initial splash screen for the device, and loading the initial files from ROM.
It checks to see if a button combination is pressed on bootup (such as that to enter Recovery Mode or the bootloader), and loads the relevant system software. If no special instruction is given by holding keys, the bootloader loads the normal system software by initializing the boot process from the boot partition.
Flashing your SPL is risky, as the process failing will probably result in a broken, or bricked phone, since the SPL is executed very early on in the boot process, and any error here will prevent access to the recovery or bootloader features.
If you do flash the SPL though, it unlocks the Carrier-ID CID from the device, essentially allowing any RUU to be installed to the device, and allows flashing alternative or custom bootscreens.
The term stock is often used to refer to a file or part of the software which is unmodified or untouched by developers. For example, a stock ROM would be one which was produced by HTC or Samsung and which has not been modified or rooted by someone. The term is often used when comparing performance of different ROMs, as a way to refer to the phone as it came out the box.
su (substitute user) is a Linux command which, when run without a username parameter, gives the user full ‘root’ permissions. By default, this command binary (ie. Linux equivalent of an executable file) is not included on Android systems, but the process of “rooting” a phone copies this file to the ‘/system/bin/’ directory thereby enabling the command. Since root privileges can be abused by malicious applications it’s highly recommended to install an app to grant and manage access to su, similar to UAC on Windows. Many ROMs include the app called “SuperSU” for this.
An object of type Surface representing a block of memory that gets composited to the screen. A Surface holds a Canvas object for drawing, and provides various helper methods to draw layers and resize the surface. You should not use this class directly; use SurfaceView instead.
A View object that wraps a Surface for drawing, and exposes methods to specify its size and format dynamically. A SurfaceView provides a way to draw independently of the UI thread for resource-intensive operations (such as games or camera previews), but it uses extra memory as a result. SurfaceView supports both Canvas and OpenGL ES graphics. The base class is SurfaceView.
The /system directory on your device is where the main operational software for the Android OS is stored. It has a number of sub-directories of which /system/apps (where application apk’s are stored) is probably the only one users would have need to access. The /system folder is read-only by default and needs remounted via ‘adb’ to allow write access.
A set of properties (text size, background color, and so on) bundled together to define various default display settings. Android provides a few standard themes, listed in R.style (starting with “Theme_”).
An update.zip (does not have to actually be called update.zip if you have a patched Recovery image) is a file containing some files which will be copied to the phone’s internal memory. Normally, a new system update or ROM is stored in the file, but update.zip files are commonly used to install modifications such as themes or applications that are installed on the System partition to prevent uninstallation.
To flash one of these files, which commonly would contain a custom ROM for your phone, you would boot your phone to a patched recovery image (whether using Fastboot, or the home+power method if you have a patched Recovery image flashed on your phone)
Update.zip files are cryptographically signed, and more information on how to sign your own files can be found online.
URIs in Android
Android uses URI strings as the basis for requesting data in a content provider (such as to retrieve a list of contacts) and for requesting actions in an Intent (such as opening a Web page in a browser). The URI scheme and format is specialized according to the type of use, and an application can handle specific URI schemes and strings in any way it wants. Some URI schemes are reserved by system components. For example, requests for data from a content provider must use the content://. In an Intent, a URI using an http:// scheme will be handled by the browser.
An object that draws to a rectangular area on the screen and handles click, keystroke, and other interaction events. A View is a base class for most layout components of an Activity or Dialog screen (text boxes, windows, and so on). It receives calls from its parent object (see viewgroup, below)to draw itself, and informs its parent object about where and how big it would like to be (which may or may not be respected by the parent).
A container object that groups a set of child Views. The viewgroup is responsible for deciding where child views are positioned and how large they can be, as well as for calling each to draw itself when appropriate. Some viewgroups are invisible and are for layout only, while others have an intrinsic UI (for instance, a scrolling list box). Viewgroups are all in the widget package, but extend ViewGroup.
One of a set of fully implemented View subclasses that render form elements and other UI components, such as a text box or popup menu. Because a widget is fully implemented, it handles measuring and drawing itself and responding to screen events. Widgets are all in the android.widget package.
In an Android application, an object derived from the abstract class Window that specifies the elements of a generic window, such as the look and feel (title bar text, location and content of menus, and so on). Dialog and Activity use an implementation of this class to render a window. You do not need to implement this class or use windows in your application.
zipalign is an archive alignment tool that provides important optimization to Android application (.apk) files. The purpose is to ensure that all uncompressed data starts with a particular alignment relative to the start of the file. Specifically, it causes all uncompressed data within the .apk, such as images or raw files, to be aligned on 4-byte boundaries. The benefit is a reduction in the amount of RAM consumed when running the application.