android anatomy

27
This document includes the following contents: Inside the Android Framework 1, 2 Introduction Author’s Preface Publisher’s Review Intended Readers Introducing the authors Table of Contents Inside the Android Framework 2 This is the first book to examine the operating principles behind critical components of the Android platform. Introduction In Android Anatomy – System Service (Subtitle: Inside the Android Framework 2), the authors analyze in depth the operating principles behind Android’s native system services, the essential components that constitute the Android platform. The authors, who have extensive work experience in related IT industries, analyzed the source codes themselves and verified their findings on Android smartphones (Nexus One TM , Nexus S TM ). The book provides abundant technical discussions on Android application development for interested IT professionals or SDK/NDK/PDK developers. This book focuses on the components that comprise the software stack in the Android platform known as “Android Anatomy.” To be specific, the following native system services are discussed: Surface Flinger, which deals with the screen; Audio Flinger, which deals with sounds; Camera Service, used when taking photos or recording videos; and Media Player and Media Record Service, which play and record MP3 and video files. Using this book, readers will obtain an in-depth understanding of the inner workings of Android, add and modify new functions and develop applications with advanced functions. Author’s Preface After writing the book Inside the Android Framework, which covered the fundamental operating principles behind Android platform, our intellectual curiosity shifted to the subject of how the system services actually operate on those principles. However, analyzing the Android platform source codes required a study group with diverse

Upload: agileexcy

Post on 02-Mar-2015

601 views

Category:

Documents


3 download

DESCRIPTION

In Android Anatomy – System Service (Subtitle: Inside the Android Framework 2), the authors analyze in depth the operating principles behind Android’s native system services, the essential components that constitute the Android platform. The authors, who have extensive work experience in related IT industries, analyzed the source codes themselves and verified their findings on Android smartphones (Nexus OneTM, Nexus STM). The book provides abundant technical discussions on Android application development for interested IT professionals or SDK/NDK/PDK developers. This book focuses on the components that comprise the software stack in the Android platform known as “Android Anatomy.” To be specific, the following native system services are discussed: Surface Flinger, which deals with the screen; Audio Flinger, which deals with sounds; Camera Service, used when taking photos or recording videos; and Media Player and Media Record Service, which play and record MP3 and video files. Using this book, readers will obtain an in-depth understanding of the inner workings of Android, add and modify new functions and develop applications with advanced functions.

TRANSCRIPT

Page 1: Android Anatomy

This document includes the following contents:

Inside the Android Framework 1, 2

Introduction

Author’s Preface

Publisher’s Review

Intended Readers

Introducing the authors

Table of Contents

Inside the Android Framework 2This is the first book to examine the operating principles behind critical components of the Android

platform.

IntroductionIn Android Anatomy – System Service (Subtitle: Inside the Android Framework 2), the authors analyze in

depth the operating principles behind Android’s native system services, the essential components that

constitute the Android platform. The authors, who have extensive work experience in related IT

industries, analyzed the source codes themselves and verified their findings on Android smartphones

(Nexus OneTM, Nexus STM). The book provides abundant technical discussions on Android application

development for interested IT professionals or SDK/NDK/PDK developers. This book focuses on the

components that comprise the software stack in the Android platform known as “Android Anatomy.” To

be specific, the following native system services are discussed: Surface Flinger, which deals with the

screen; Audio Flinger, which deals with sounds; Camera Service, used when taking photos or recording

videos; and Media Player and Media Record Service, which play and record MP3 and video files. Using

this book, readers will obtain an in-depth understanding of the inner workings of Android, add and

modify new functions and develop applications with advanced functions.

Author’s PrefaceAfter writing the book Inside the Android Framework, which covered the fundamental operating

principles behind Android platform, our intellectual curiosity shifted to the subject of how the system

services actually operate on those principles. However, analyzing the Android platform source codes

required a study group with diverse technical backgrounds and experiences. In addition, the number of

codes required in actual service implementation, compared to the codes that implement basic service

components, was much more extensive in real life than expected, being anywhere between 10 to 100

times larger in terms of size. However, we were undaunted by the magnitude of the task in front of us and

pursued our challenge with determination. So we looked everywhere to find some help to get things going

and eventually discovered a reference book – the only book in the market at the time and even until now –

that explained the workings of Android native system services.

So we recruited members for a study group, hired professional translators and conducted research and

Page 2: Android Anatomy

analysis over a three-month period. However, the result was not satisfactory. Unlike the members who

had participated in writing Inside the Android Framework¸ the new study members were not familiar with

the Android platform and in the end had not developed sufficient interest to pursue the project further. In

effect, the project failed. However, undaunted, we decided to give it another chance based on what we had

learned from our failure. So we formed another group of people who were actually working on the

Android platform in their professional careers and who were also interested writing the book.

This time, however, the reference book that we had discovered and had been using as a reference became

an issue. As the analysis progressed and the members’ knowledge of the subject matter expanded, they

started complaining about the limited information contained in the book, the most significant complaint

being that the book did not have sufficient explanations about the materials pertinent to our study. Also,

the platform version on which the book had been based was already outdated and did not reflect the most

recent changes in the platform. As we passed the three-month mark in our study, we were beginning to

fear the prospect of another failure, around which time I recalled what Robert Love, the author of Linux

Kernel Development, said: “Kernel developers are not afraid of rewriting a lot of code for the sake of

perfection.”

“That’s right. Let’s write Inside the Android Framework 2,” I declared.

Flashing a photo of Robert Love for moral support and using some half-coercive measures, I eventually

succeeded in convincing our study group members that we too could become programming heroes like

those legendary Linux kernel developers. So began our new adventure. Inside the Android Framework 2

is a compilation of knowledge and experience that we gained against all odds – the new and unfamiliar

intellectual territory called the Android platform, Google’s rapid version upgrade and the user’s constant

demand to catch up with the latest update. This is also a precious outcome resulting from many failures in

our search for a successful analysis of the Android platform.

Like the previous volume, Inside the Android Platform 2 is based on Patrick Brady’s “Anatomy &

Physiology of an Android,” presented at the 2008 Google IO. If the previous volume focused on Android

physiology, this book concentrates on its anatomy. In particular, it concentrates on the operating principles

of Media Framework Service such as Surface Flinger and Audio Flinger, the unique native services of the

Android platform.

In addition, this book provides explanations of topics that are critical to Android platform development –

Binder IPC, data sharing techniques among processes, simultaneous control, permission, power

management, native library and debugging methods. There were no changes in these from platform

version 1.6 to 2.3 and we expect no significant changes in the future either. For developers who work in

the fields related to Android, we sincerely hope that this book will be of great use to their work.

Page 3: Android Anatomy

Publisher’s ReviewA must-read for those who are interested in Android platform analysis: A great sequel to the highly

successful Inside the Android Platform.

For those who found Inside the Android Platform exciting, this is a must-read. In particular, this book will

be pleasure to those who are curious to learn about the operating principles of the Android platform and

put them in use. Most of the authors who participated in writing Inside the Android Platform got together

again to tell untold stories from the first volume. Also, all of our authors are working professionals in the

relevant subject fields, and the book is filled with knowledge that can be applied to your tasks at work.

The “Anatomy of Android – System Service” section concentrates on describing the software stack

component of the Android platform, which is also known as the “Anatomy of Android.” Each group

member was assigned a section of the system services for which he was responsible, analyzed the

platform source codes, examined the references, discussed the findings with each other and verified the

results of the analysis on Nexus OneTM and Nexus STM, the Android smartphones. Also, the book selects

and explains in detail only the most critical subjects among fundamental Android programming principles

and key points in the development process that encompass the entire platform.

This book is the precious result of much trial and error the authors labored through. It also contains all of

our excitement and joy as we spent thousands of hours analyzing platform source codes, setting up

hypotheses, and proving them true one by one. We wrote this book with Android developers in mind and

from their perspective. We wanted to reduce as much as possible any of their fears about starting Android

applications development, and wrote this book so that they wouldn’t have to go through the same trial and

error we did.

This book covers essential Android system services using Android platform source codes. For developers

who are involved in the development of embedded system applications built on the Android platform, we

hope this book will help them to customize the Android platform for their specific development goals and

produce products that are differentiated from those of their competitors. We also recommend this book for

those who would like to gain a deeper understanding of the Android platform or develop their own

customized products.

Intended ReadersReaders are expected to have either a computer science degree or some background knowledge in Linux,

C, C++ and Java. They don’t have to be a specialist in each area but must have fundamental computer

science knowledge. Accordingly, coverage of the above-mentioned topics was limited to a minimum level

in this book. The subject of the Android platform being vast, it was hard enough to treat the main subject

alone. Also, there are many good references in the market treating the subjects of Linux, C, C++ and Java,

so we assumed that readers would be able to acquire relevant knowledge and information without

difficulty, if necessary.

Page 4: Android Anatomy

Also, we did not assume that readers are application developers who use SDK or NDK, or platform

developers who work on platform source code modification themselves. This book focuses on the

essential operating principles of Android system services – Surface, Audio, Camera, etc. – and introduces

various ways these services can be implemented. Regardless of the roles that readers assume in the

application development process, we thought such a structure for the book was worth trying. We believe

that this book will help readers understand Android platform’s system services better. We strictly adhered

to this principle as we were writing this book.

The focus of the book is on engineering students and engineers, but it is good enough to interest advanced

application developers wanting to build a solid foundation in Android. If you are a platform developer,

the knowledge contained in this book is a must because an in-depth understanding of the Android

platform is absolutely necessary in order to develop products that are differentiated from those of other

competitors. Also, in general, if you are curious and want to know more about the Android platform, this

is a good book to read. Readers are guaranteed to understand the basic operating principles behind the

Android platform.

“No matter what your motivations are for choosing this book, we hope you will find it exciting and

interesting above all else.”

Topics covered in this book

Overview of Android Anatomy

Configuring the Android platform development environment and debugging method.

Introducing essential knowledge needed for Android platform development – Binder IPC,

ashmem, Service Framework, JNI, HAL.

Analyzing critical services such as Surface Flinger, Audio Flinger, Camera Service, Media

Framework.

Providing background knowledge to facilitate understanding of system service operations.

Introducing the authorsAuthor: Edward T. Kim

He was Software Engineer at LG Electronics, where he was a member of the team that built Android

devices which are LU-2300 and SU-950. Edward received the BS and MS degrees in Computer Science

from the Pusan National University, Korea, in 2007 and 2009, respectively. He is currently working

toward the PhD degree in Object Oriented System Lab. at the same university and leading the Seoul

Android Platform Study Group. His research interests include Android, GUI and Compatibility Testing,

Object Oriented systems, Relational Database.

Author: Peter Park

Graduated from Kyungsung University with a degree in Computer Science. While at school, worked on a

project related to embedded Linux application at Samsung Software Membership. Currently working on

Page 5: Android Anatomy

SOC verification task in the semi-conductor industry. Interested in multi-core environment in embedded

OS area.

Table of Contents: Inside the Android Framework 2(2011)

Chapter Description

Android

Anatomy

A brief introduction to Android Anatomy. Explains the subjects and the scope of the

book.

Android

Development

Environment

Builds a development environment for Android applications. Includes useful

information for developers with reference to programming, debugging, logging and

building for devices under the Android platform.

Android

System Services

Overview

Provides basic knowledge necessary to understand Android’s native system. First,

this chapter introduces the concept of Android system services, describes their

initialization processes and then explains them from the process point of view. Next,

it introduces “service framework” to explain how to create system services. Then it

describes JNI and HAL, which are critical background knowledge for understanding

system services as they operate freely across complex Android platform stacks. The

chapter uses Camera applications as an example to illustrate layer interaction

processes.

Advanced

Binder IPC

This chapter explains the advanced Binder technique used in the Android platform.

First, it shows that the Binder IPC is really a streamlined RPC. Then it describes the

interaction among various applications and system services. It treats Remote

Service in three parts – forward, backward and transmission – which is one of the

most critical parts of Android system service analysis. Finally, the chapter focuses

heavily on how to use the binder to transmit and share large size data among

processes. MemoryHeapBase is used as an example to illustrate how easy it is to

use shared memory.

Surface

Flinger

Service

This chapter describes Surface Flinger Service responsible for screen control in the

Android platform. First, it explains graphic HAL, EGL, OPENGL ES and shared

memory configuration by going over Surface Flinger Service initialization process.

Then, it delves into Surface Flinger’s native functions – application connection

management, surface management and surface composition. Finally, the chapter

illustrates how Activity Screen is really displayed using Surface Flinger, and it uses

HelloWorld as an illustrative example.

Page 6: Android Anatomy

Audio

System

With respect to audio data playback and recording, Audio System handles

transmission and control of data stream, and manages audio devices. This chapter

treats audio data transmission method and the relationship between AudioTrack and

AudioFlinger in Audio System, with separate sections for explaining audio input

and output. It also describes Audio Policy Service overseeing Audio Focus and

Pass.

Camera

Service

Camera Service is critical in supporting multimedia functions in Android. In

particular, it is needed for high-resolution photo shoot, video recording, augmented

reality, object recognition and other application utilizations. This chapter explains in

detail the operating mechanisms behind photo shoot, video recording, camera

preview, overlay and others.

Media Player

Service

Media Framework is a key component of the Android system services that

combines Surface Flinger, Audio Flinger, Camera Service and others that allow

playing and recording of media data. This chapter focuses on interactions among

system services in order to facilitate a better understanding of Media Framework.

First, the chapter explains the structure and functions of Stagefright Media Player,

which is responsible for the playback of media data in Media Player Service. It also

describes the interactions among several critical Media Player functions – metadata

extraction, event handling, media buffer management, audio player and video

renderer. Readers gain practical understanding of Media Player by tracing real data

and the flow of function calls based on a simple example. Finally, this chapter

explains the operation of Metadata Service related to Media Player and illustrates

the relationship between multimedia codec and parser, making possible a

comprehensive understanding of multimedia playback functions in Android.

Table of ContentsChapter 1 Anatomy of Android

Introducing Anatomy of Android

Introducing Physiology of Android

Chapter 2 Building an Android Development Environment

2.1 Building a host environment

2.1.1 Installing VirtualBox

2.1.2 Installing Ubuntu (64 bit)

2.2 Constructing an Android system build environment

2.2.1 Utilities needed for platform-build

2.2.2 Installing JDK

2.2.3 Installing necessary packages

Page 7: Android Anatomy

2.2.4 Installing Report

2.2.5 Android system-build

2.3 Uploading Android to NexusOne

2.3.1 Configuring an environment for NexusOne build

2.3.2 Configuring USB devices

2.3.3 Uploading Android to NexusOne

2.4 Building an Android SDK development environment

2.4.1 Downloading Android SDK starter package

2.4.2 Adding platform and example programs to Android SDK

2.4.3 Building an Eclipse development environment

2.4.4 Building an ADT plug-in for Eclipse

2.4.5 Configuring an Android SDK file path

2.5 Developing Android applications

2.5.1 Creating a Hello application

2.6 Debugging an Android system source label

2.6.1 Loading Application framework source codes

2.6.2 Debugging Hello application source codes

Chapter 3 Android System Service

3.1 System services

3.1.1 Native system services

3.1.2 Java system services

3.2 Creating system services

3.2.1 Analyzing media system source codes

3.2.2 Analyzing system server source codes

3.2.3 Summary

3.3. Process and thread in system services

3.3.1 Media Server and thread

3.3.2 System Server and thread

3.3.3 Communication among threads

3.3.4 Summary

3.4 System framework

3.4.1 Overview of the Android service framework

3.4.2 Understanding the Android service framework via examples

3.4.3 Summary

3.5 Java Native Interface

3.5.1 Registering native method

3.5.2 Calling native method from Java

3.5.3 Using Java class from Native System

Page 8: Android Anatomy

3.6 Hardware Abstract Layer

3.6.1 Classification of HAL

3.6.2 Structure of HAL

3.6.3 Initialization of HAL

3.7 Layer Interactions

3.7.1 Classification of layer interactions

3.7.2 Examples of Camera applications

3.7.3 Layer interactions in Camera applications

Chapter 4 Advanced Binder IPC

4.1 Overview of Binder IPC

4.1.1 Service and service user

4.1.2 Context Manager and Service Manager

4.1.3 Binder Driver

4.2 Interactions among various components

4.2.1 Registering system services

4.2.2 Searching for system services

4.2.3 Using system services

4.2.4 Summary

4.3 Native Remote Service

4.3.1 Creating Remote Services (forward)

4.3.2 Creating Remote Services (backward)

4.3.3 Transmitting Remote Services

4.3.4 Examples of Native Remote Service

4.3.5 Summary

4.4 Android Shared Memory

4.4.1 Overview of Android Shared Memory

4.4.2 Overview of ASHMEM

4.4.3 Creating ASHMEM

4.4.4 Controlling ASHMEM

4.4.5 Mapping ASHMEM

4.5 MemoryHeapBase Class

4.5.1 Class structure

4.5.2 Examples

4.6 File identifier transmission mechanism

4.6.1 Overview of file identifier transmission

4.6.2 Calling ASHMEM file identifier

4.6.3 Returning ASHMEM file identifier

4.7 IMemory

Page 9: Android Anatomy

4.8 MemoryDealer

Chapter 5 Surface Flinger Service

5.1 Introducing Surface Flinger Service

5.1.1 Various screens of Android

5.1.2 Roles of Surface Flinger Service

5.1.3 Properties of Surface Flinger

5.2 Structure of Surface Flinger Service

5.2.1 Surface Flinger class diagram

5.2.2 Graphics HAL Interface

5.3 Initializing Surface Flinger Service

5.3.1 Creating Surface Flinger

5.3.2 Initializing Main Display

5.3.3 Creating Native Window

5.3.4 Creating display shared control block

5.3.5 Initializing EGL

5.3.6 Boot animation

5.4 Analyzing Surface Flinger’s critical functions

5.4.1 Managing client connection

5.4.2 Maintaining layers

5.4.3 Maintaining layer conditions

5.5 Layer composition and screen output

5.6 Understanding Surface Flinger operation using examples

5.6.1 Creating activities and window

5.6.2 Basic screen (Canvas)

5.6.3 Screen that requires rapid processing (SurfaceView)

5.6.4 Drawing 3D screen (GSSurfaceView)

Chapter 6 Android Audio System

6.1 Overview of Audio System

6.1.1 Role of Audio System

6.1.2 PCM data

6.2 Structure of Audio system

6.2.1 Audio System components and Audio System Layer analysis

6.2.2 Analyzing interlayer operations

6.2.3 Initializing Audio Flinger and Audio HAL

6.3 Audio Output

6.3.1 Examples of Audio Output application

6.3.2 Audio Output components

Page 10: Android Anatomy

6.3.3 Creating playback tracks

6.3.4 Securing shared memory and creating control block

6.3.5 Inserting playback track

6.3.6 Preparing playback track

6.3.7 Transmitting PCM data

6.3.8 PCM data re-sampling and composition

6.3.9 PCM data output

6.4 Audio input

6.4.1 Examples of application using audio input

6.4.2 Audio input components

6.4.3 Creating record track

6.4.4 Audio input stream and RecordThread creation

6.4.5 Inserting record track and preparation process

6.4.6 PCM data input

6.5 Audio Policy Service

6.5.1 Operating Audio Policy Service

6.5.2 Audio I/O stream

6.5.3 Controlling stream volume

6.5.4 Audio routing

Chapter 7 Camera Service

7.1 Introducing Camera Service

7.1.1 Understanding Camera hardware

7.1.2 Role of Camera Service

7.2 Structure of Camera Service

7.3 Initializing Camera Service

7.3.1 Creating Camera Service

7.3.2 Connecting to Camera Service

7.3.3 Understanding Camera call-back functions

7.4 Preparing Camera Preview

7.4.1 Configuring Camera

7.4.2 Configuring Camera Frame Memory

7.4.3 Configuring Camera Video Surface

7.5 Understanding Camera Preview operations

7.5.1 Starting Camera Preview

7.5.2 Creating PreviewThread

7.5.3 Registering Preview Images Buffer

7.5.4 Transmitting Preview Image Frame

7.6 Understanding Camera operation

Page 11: Android Anatomy

7.6.1 Configuring Auto-Focus

7.6.2 Creating PictureThread

7.6.3 Understanding data transmission process when taking photos

Chapter 8 Media Player Service

8.1 Media Framework

8.1.1 Organization of Media Framework

8.1.2 Communication among the system services

8.2 Overview of Media Player Service

8.3 Structure/Initialization of Media Player Service

8.3.1 Class structure

8.3.2 Initialization

8.3.3 Event-driven operation control

8.4 Handling Media Data

8.4.1 Media File and Stream – DataSource Class

8.4.2 Media Extractor

8.4.3 Decoding – MediaSource Class

8.5 Audio output – AudioPlayer Class

8.6 Video output – AwesomeRenderer Class

8.6.1 Movement control using Video Event

8.6.2 Obtaining video information using Decoder

8.6.3 Creating VideoRenderer

8.6.4 Synchronizing video and audio data playback

8.6.5 Rendering video information to screen

8.7 Understanding Media Player using examples

8.7.1 Stagefright Media Player diagram

8.7.2 Analyzing source codes for illustration

8.7.3 Function call sequence in media playback

8.8 Metadata Service

8.8.1 Role of Metadata Extractor

8.8.2 Metadata Extractor operation

8.9 OpenMax Codec Support

8.9.1 Understanding OpenMax Interface

8.9.2 Initializing OpenMax interface

8.9.3 Media playback and hardware support

Inside the Android FrameworkAn excellent reference book for studying the Android framework!

IntroductionThe main focus of Inside the Android Framework is the initialization of the Android framework during

Page 12: Android Anatomy

the booting process and the operating principles behind the framework’s major components. In this book,

the authors analyze and summarize the framework’s major source codes and provide the basic knowledge

needed to understand the framework’s operating principles. In addition, the book also provides detailed

descriptions of the Android Service framework, which constitutes the foundation of the Android

applications development platform.

Some of the major topics contained in this book are:

An overview of the Android framework through examination of the booting process.

The basic knowledge and concepts behind developing Android applications and porting them to

Android devices.

Analyzing essential Android components – JNI (Java Native Interface), Binder, Zygote, Service

Manager and Service Server.

Understanding the structure of the Android Service Framework.

Some examples of Android system services, e.g., Camera Service and Activity Manager Service.

Author’s PrefaceWhat are some of the important abilities mobile application developers must have?

Many answers are possible, but we think the most important one is to understand the framework applied

to a given target device. It is for the same reason that programmers with a solid understanding of the

Windows or Linux operating system and web browsers are considered better programmers.

Likewise, understanding a given framework’s operating principles under a mobile platform is a key to

becoming an advanced-level mobile applications programmer, which is certainly true for Android

applications developers. However, it is very hard to find good resources that deal with this subject in the

bookstore or on the Internet. To make it worse, there aren’t any clear and sufficiently extensive

explanations of the subject of the Android framework itself, other than some very limited information

made available by Google or at Google IO (the annual technical conference held by Google for

applications developers).

When we wrote this book, the only way to learn about the Android framework’s operating principles was

to examine the source codes at the most foundational level. Certainly we were not endowed with

sufficient resources to do an independent study on the Android framework in the beginning. Therefore,

we were forced to acquire any knowledge they needed from direct examination of Android source codes.

As you might expect, we were initially at a loss to know where to even begin our study because of the

sheer vastness of the Android source codes universe.

Fortunately, we were able to get some ideas from the resources given out during the “Anatomy &

Physiology of an Android” presentation at the Android session of the 2008 Google IO Conference,

Page 13: Android Anatomy

including the treatment on the subject of Android framework initialization and other relevant topics. It

gave us a direction for our research and jump-started our project.

When we started out, we were basing our analysis on Android version 1.5 (Cupcake). By the time we

were finalizing the manuscript for this book, however, Google had introduced version 2.2 (Froyo). Of

course, the book was revised to reflect the most updated Android version, but the nature of the framework

being what it is, there had been very limited changes in the source codes, which eliminated any concern

about version differences in Android. Even for version 3.3 (Gingerbread), to be introduced in late 2010,

we do not foresee any major changes in source codes and expect the integrity of our book to be preserved

under the new version.

Finally, please keep in mind that our treatment of the Android framework in this book is not an exhaustive

explanation of the inner workings of Android but only a guide to the internal operating principles of the

Android framework. We recommend that you use this book as a starting point for source codes analysis

for the project that you are involved in. We are confident that it will be of great use to whatever project

you are working on.

Publisher’s ReviewThe best reference book for studying the Android framework in Korea

This book is like a sweet rain for those who have been searching for a book that deals with the structure

of the Android framework. It is easy to find books on application development using Android SDK in the

bookstore or on the Internet, but a book that deals with the structure and operating principles of the

Android framework is virtually non-existent at this point. Even Google is not making information readily

available to pertain specifically to the internal workings of the Android framework.

The main focus of Inside the Android Framework is the initialization of the Android framework during

the booting process and the operating principles behind the framework’s major components. In this book,

the authors analyze and summarize the framework’s major source codes and provide the basic knowledge

needed to understand the framework’s operating principles. In addition, the book also provides detailed

descriptions of the Android Service Framework, which constitutes the foundation of the Android

applications development platform.

This book is also a journal kept by a handful of intellectual pioneers who recorded their discoveries as

they were exploring the unknown territory of the Android framework. Together, they spent hundreds of

hours poring over millions of lines of source codes projected on the screen for group study, and now they

want to share with readers the excitement they experienced deciphering Google’s secrete codes.

Page 14: Android Anatomy

You could certainly develop Android applications without an in-depth understanding of the Android

framework. However, if you are familiar with the framework and have a solid understanding of its

operating principles, you won’t be intimidated by difficult development scenarios, no matter how

complicated they are, and will have confidence that you can write codes that are optimized for the

Android framework.

Also, Android being an open source platform, each hardware vendor is introducing products that are

differentiated from those of its competitors by customizing the Android framework to its own

specification. In order to develop customized solutions using the Android framework, it is now necessary

to understand the Android framework in depth.

Inside the Android Framework deals with the Android framework in depth by examining Android’s

system source codes. This book is recommended for developers who want either to have a deeper

understanding of the Android system or to develop Android solutions that are optimized to the

framework.

Topics covered in this book.

An overview of the Android framework during the booting process

The basic concepts and knowledge behind developing and porting Android applications to a

target device.

Analyzing essential Android components – JNI (Java Native Interface), Binder, Zygote, Service

Manager, Service Server.

Understanding the structure of the Android system service framework

Analyzing actual examples of Android system services using Camera Service and Activity

Manager.

Intended readersReaders are expected to have either a computer science degree or some background knowledge in Linux,

C, C++ and Java. They don’t have to be a specialist in each area but must have some computer science

background. Accordingly, coverage of the above-mentioned topics was limited to a minimum level in this

book. We must admit that, the subject of the Android platform being vast, treating the main subject was

challenging enough. Also, there are many good reference books in the market that deal with the subjects

of Linux, C, C++ and Java, so we assumed that readers would be able to acquire relevant knowledge and

obtain necessary information without difficulty, if necessary.

Also, we did not assume that readers were application developers who use SDK or NDK or platform

developers who work on platform source code modification themselves. This book closely follows the

booting process of Android-based devices and explains a sequence of “software-like” hardware

operations that take place inside the device. Regardless of the roles that readers assume in the application

development process in their respective jobs, we thought that the strategy we used to write this book was

Page 15: Android Anatomy

worth trying. We believe that this book will help readers better understand the Android platform’s system

services. We strictly adhered to this principle as we were writing this book.

The focus of the book is on engineering students and engineers, but it is broad enough to interest

advanced-level application developers wanting to build a solid foundation in Android. If you are a

platform developer, the knowledge contained in this book is a must because an in-depth understanding of

Android is absolutely necessary in order to develop products that are differentiated from those of other

competitors. Also, in general, if you are curious and want to know more about the Android platform, this

is a good book to read. Readers are guaranteed to understand the basic operating principles behind the

Android platform.

“No matter what your motivations are for choosing this book, we hope you will find it exciting and

interesting above all else.”

The value of this book The book treats some of the more controversial issues of the Android mobile operating system.

The book was introduced in Korea and became the bestselling IT book. It is a proven winner with

enthusiastic approval from readers.

The book was selected as the 2011 Best Academic Paper (Science and Technology Area) by the

Korea Ministry of Culture and Tourism.

Ten thousand copies were printed in Korea alone, and five thousand copies are expected to be

printed once the copyright contract with China is completed.

So far, there have been no books published in the US and Japan on the subject of the Android

platform.

Most of the authors work at Samsung Electronics and LG Electronics, the combined mobile phone

sales of which dominate the world market.

Introducing the authorsAuthor: Edward T. Kim

Studied Computer Engineering / Computer Software Engineering in graduate school at Pusan National

University. Participated in LG Electronics’ Android mobile phone development. Currently leads the Seoul

Android Platform Study Group, which succeeded the Suwon Android Platform Study Group.

Author: Song Hyungju

Graduated from KAIST with a major in Sensor Network Platform. Interested in software platform

structure and operating principles, in particular Android. Currently working on HTLML 5-based web

platform development after having been involved in next-generation mobile communication systems and

widget development. Has a dream of rejuvenating the software development community through the

sharing of applications development-related knowledge on- and off –line.

Page 16: Android Anatomy

Author: Park Jihoon

Graduated from Kyungsung University with a degree in Computer Science. While at school, worked on a

project related to embedded Linux application at Samsung Software Membership. Currently working on

SOC verification task in the semi-conductor industry. Interested in multi-core environment in embedded

OS area.

Author: Lee Baek

Interested in embedded OS and platform development. Currently developing Android applications porting

and system program development.

Author: Lim Kiyoung

Interested in structural analysis of Linux-based device platform. Currently working on porting embedded

OS applications and device driver implementation.

Table of Contents, Inside the Android Framework (2010)

Chapter Description

Android

Framework

A brief introduction to the Android framework with a description of the book’s

content and its coverage.

Android

Development

Environment

How to build a development environment for the Android platform. Explains how

to download and compile Android platform source codes, install SDK and use

Eclipse to do Application framework debugging.

Init Process The init process in the Android platform configures the environment for system

operations during the system booting process and sequentially executes critical

system processes. This chapter describes how the init process analyzes init.rc file,

executes instructions and creates device driver nodes. Also, the chapter examines

the property service that completes child processes, stores system environmental

variables and executes a given process.

JNI & NDK Android can generally be divided into two parts, the Java layer and the Android’s

native layer, and JNI bridges these two layers. This chapter explains in detail the

operating principles of JNI. In particular, the chapter explains how to call a C

program from Java programs, and vice versa, and introduces critical JNI functions.

Then the authors describe how to utilize JNI in the Android platform and optimize

it. Finally, the chapter provides some examples on how to install NDK and execute

emulators.

Zygote Like an unfertilized egg that fuses with a nucleus to start cell division, a new

application in the Android platform is executed when Zygote, which represents an

“unfertilized” state and stores all necessary elements for executing a process, fuses

with a new application. This chapter introduces a special way to start a new

Page 17: Android Anatomy

application using Zygote in the Android platform. In particular, it focuses on

explaining add_process and ZygoteInit class.

Android Service

Overview

There are various application services in the Android platform ranging from

application services using SDK to system services that are essential to the

platform’s critical functions. This chapter introduces various services running on

the Android platform and analyzes the operating principles behind applications and

the system services. In addition, terminology related to the concept of Binder IPC

and System Service framework is defined and explained.

Android Binder

IPC

At the heart of the core technology supporting the Android platform is the Binder.

The Binder in Android is an IPC that supports communication among processes,

and is light and fast. In this chapter, a Linux Binder driver is examined first. Then

the chapter introduces a Binder model, basic knowledge about the Binder, a Binder

protocol, some transaction codes and data and a Binder addressing. Next, based on

the basic knowledge obtained, this chapter analyzes service-use mechanism using

the Binder from the process perspective and then from the Binder driver

perspective. Finally, this chapter explains how the Context Manager, a special

Binder process, manages system services.

Android Service

Framework

The Java layer in the Android platform also provides Java Service Manager that

creates system services and uses them in applications. For this, Java service

framework uses JNI to reuse the functions that reside in Android’s native

framework. This chapter provides in-depth explanations on the various components

that comprise Java Service framework and the interactions among them. Also, it

analyzes Alarm Manager Service from the service framework’s point of view and

explains how to use AIDL to implement HelloWorld system services, which work

on Java layer. Finally, the chapter examines the operating principles behind Java

Service Manager.

Analysis of Native

System Service

Camera Service, one of the components that make up the Android platform, is

analyzed in this chapter. Based on the concepts of the Binder and the System

Service framework explained in the previous chapters, this chapter analyzes

Camera Service, which directly operates on the Android platform, with respect to

initialization, connection, control and event-handling processes.

Android Java

Service Framework

This chapter provides a detailed description of Java layer’s System Service

framework components and their interactions. Also, the authors examine Alarm

Manager Service from the System Service framework’s point of view and explain

how to use AIDL to implement the HelloWorld program that operates on Java layer.

Finally, the chapter explains the operating principles behind Java Service Manager.

Analysis of Java

System Service

In this chapter, the Activity Manager, one of the Java system services that comprise

the Android platform, is examined. From various functions belonging to Activity

Page 18: Android Anatomy

Manager Service, the authors select and explain in detail how to create application

services. To illustrate this, the book focuses on binder communication among

ActivityManagerService, ActivityThread and ApplicationsThread classes.

Table of Contents: Inside the Android FrameworkChapter 1 Overview of the Android Framework

Structure of the Android framework’s source codes

Exploring the Android framework by studying the booting process

Chapter 2 Building a Development Environment for Android

2.1 Configuring the host environment

2.1.1 Installing VirtualBox

2.1.2 Installing Ubuntu

2.2 Configuring an Android “System-build” environment

2.2.1 Build utility

2.2.2 Installing Repo

2.2.3 Downloading Android system source codes

2.3 Configuring an Android SDK development environment

2.3.1 Setting up an Eclipse development environment

2.3.2 Downloading the Android SDK starter package

2.3.3 Installing the ADT plug-in for Eclipse

2.3.4 Designating an Android SDK path

2.3.5 Adding platform and sample programs to Android

2.4 Developing Android applications.

2.4.1 Create HelloWorld applications

2.5 Debugging Android system source label

2.5.1 Loading Application framework source codes

2.5.2 Debugging HelloWorld framework source labels

Chapter 3 nit rocess

3.1 Executing init process

3.2 Init process source code analysis

3.3 Analyzing and executing init.rc file

3.3.1 action_list

3.3.2 service_list

3.3.3 Parsing code for analyzing init.rc file

3.3.4 Executing action_list and service_list

3.4 Creating device node file

Page 19: Android Anatomy

3.4.1 Create static device node

3.4.2 Sensing dynamic device (HOT PLUG)

3.5 Starting and ending a process

3.5.1 Analyzing restart_process( )

3.6 Property Service

3.6.1 Initializing property

3.6.2 Handling property change request

3.7 Summary

Chapter 4 JNI and NDK

4.1 Android and JNI

4.1.1 Why do we need to know JNI in Android?

4.2 Understanding JNI’s fundamental principles

4.2.1 Calling C library functions from Java

4.2.2 Summary

4.3 Using JNI functions

4.3.1 Structure of sample programs using JNI functions

4.3.2 Examining Java codes

4.3.3 Compilation and execution results

4.3.4 Example of Android application

4.4 Executing Java class in C programs

4.4.1 Example of calling API

4.4.2 Compilation and execution

4.4.3 Example of Android applications: Zygote process

4.5 Directly registering JNI native functions

4.5.1 Registering JNI native functions while loading library

4.5.2 Example of Android applications: app_process( )

4.6 Developing Android NDK (Native Development Kit)

4.6.1 Android NDK environment configuration

4.6.2 Emulating Android NDK development

Chapter 5 Zygote

5.1 What is Zygote?

5.1.1 Creating a process using Zygote

5.2 From app_process to executing ZygoteInit class

5.2.1 Creating AppRuntime object

5.2.2 Executing AppRuntime object

5.2.3 Creating Dalvik virtual machine

5.2.4 Executing ZygoteInit class

Page 20: Android Anatomy

5.3 Functions in ZygoteInit class

5.3.1 /dev/socket/zygote socket binding

5.3.2 Loading platform resources and Application framework classes

5.3.3 Execute System Server

5.3.4 Executing new Android applications

Chapter 6 Overview of Android Service

6.1 Example programs: Understanding Android service operations

6.2 Classifying Android services

6.3 Android application services

6.3.1 Classifying application services

6.3.1.1 Local Service

6.3.1.2 Remote Service

6.4 Android System Service

6.4.1 Classifying Android system services

6.4.1.1 Native System Service

6.4.1.2 Java System Service

6.5 Executing system services

6.5.1 Analyzing Media Server codes

6.5.2 Analyzing System Server codes

6.6 Overview and summary of Android service framework and binder driver

Chapter 7 Android Binder IPC

7.1 Linux memory space and binder driver

7.2 Android Binder Model

7.2.1 Binder IPC data transfer

7.2.2 Binder IPC data flow

7.2.3 Binder protocol

7.2.4 RPC code and RPC data

7.2.5 Binder addressing

7.3 Android binder driver analysis

7.3.1 Using service from process perspective

7.3.2 Using service from binder driver perspective

7.3.3 Analyzing binder driver functions

7.4 Context Manager (Service Manager)

7.4.1 Context Manager operations

7.5 Summary

Chapter 8 Android Service Framework

Page 21: Android Anatomy

8.1 Android Service Framework

8.2 Analyzing Service Framework

8.2.1 Arranging components by layers

8.2.2 Interactions of components across different layers

8.2.3 Class structure

8.3 Operating principles

8.3.1 Service interface

8.3.2 Service

8.3.3 Service proxy

8.4 Native Service Manager

8.4.1 Overview of Service Manager

8.4.2 Service Manager class

8.4.3 Service Manager operations

8.5 Creating native services

8.5.1 Designing HelloWorld system service

8.5.2 HelloWorld service interface

8.5.3 HelloWorld service

8.5.4 HelloWorld service proxy

8.5.5 Executing HelloWorld service

Chapter 9 Analyzing Native System Service

9.1 Camera Service

9.2 Camera applications

9.3 Camera Service framework

9.3.1 Interlayer structure of Camera Service framework

9.3.2 Camera Service framework service

9.4 Camera Service framework operation

9.4.1 Initializing Camera Service

9.4.2 Camera Service connection

9.4.3 Analyzing source codes for Camera Service connection

9.4.4 Configuring and controlling Camera

9.4.5 Analyzing configuration and control process of Camera

9.4.6 Handling Camera Event

9.4.7 Analyzing Camera Event’s event handling process

Chapter 10 Java Service Framework

10.1 Java Service Framework

10.1.1 Components of Java service framework by layer

10.1.2 Java service framework interactions by class

Page 22: Android Anatomy

10.2 Operating mechanism

10.2.1 Java service framework initialization

10.2.2 Binder

10.2.3 BinderProxy

10.2.4 Parcel

10.3 Implementing Java system services

10.3.1 Analyzing structure of Alarm Manager Service

10.3.2 Implementing HelloWorldService system service

10.3.3 Using HelloWorldService system service

10.3.4 Building HelloWorldService system service

10.4 Java Service Manager

10.4.1 Introducing Java Service Manager

10.4.2 BinderInternal

10.4.3 Java Service Manager Operation

10.5 Implementing Java proxy and stub using AIDL

Chapter 11 Java System Service Operation

11.1 Activity Service Manager

11.2 Analyzing codes to create services using Activity Manager Service

11.2.1 Controller activity – calling startService() method

11.2.2 Process of calling startService() method in Activity Service Manager (using

RPC Binder)

11.2.3 Activity Service Manager - Executing startService() stub method

11.2.4 Executing main() method of ActivityThread class

11.2.5 Activity Service Manager – handling attachApplication() stub method

We are looking forward to hear from the publisher in USA to publish our books about Android platform.

Isn't there anybody who has connections in the publisher?

Briefly, let me introduce our books:

1) The first print of “Inside the Android” run of 10,000 copies sold out for about a year in Korea, which is

bestseller in Computer Section.

2) The authors have studied Android Platform with the source code during nine months. The contents of

the book introduce Android Platform of fundamentals, init process, JNI, Zygote, Binder, Service

Page 23: Android Anatomy

Framework based on 2.2 froyo.

3) “Android Anatomy” is also being written by experts in this field. They have experience developing

Android Platform. The contents of the book introduce Android Platform of core system services, surface

flinger, audio flinger, camera service, multimedia framework based on 2.3 gingerbread.

If you have any questions, feedbacks and suggestions about the contents of the books, please send me

that.

I am ready to accept publisher’s requests with flexible position.

Thank you for your interesting in my books, again.

Yours sincerely,

Edward T. Kim

p.s: Let me introduce my agency which is charge of the contact with a US publisher of my books and

have experience with translation contacts in this field. The information about my agency is the below.

Lauren Kim / EntersKorea Co., Ltd

Foreign Rights Agent / English-Europe Department

A: 3F, Do Dream Bldg, #375-8, Mangwon-dong, Mapo-gu, Seoul, 121-230, Korea

E-mail: [email protected]

P: +82-70-7126-3013

F: +82-2-3142-8139

FR team www.ekagency.co.kr

TR team www.ekitc.com

DE team www.designbbook.com