Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Embedded Android
Dedication
Dedication
Preface
Learning How to Embed Android
Audience for This Book
Organization of the Material
Software Versions
Conventions Used in This Book
Using Code Examples
Safari® Books Online
How to Contact Us
Acknowledgments
1. Introduction
History
Features and Characteristics
Development Model
Differences From “Classic” Open Source Projects
Feature Inclusion, Roadmaps, and New Releases
Ecosystem
A Word on the Open Handset Alliance
Getting “Android”
Legal Framework
Code Licenses
Branding Use
Google’s Own Android Apps
Alternative App Markets
Oracle versus Google
Mobile Patent Warfare
Hardware and Compliance Requirements
Compliance Definition Document
Software
Application packaging compatibility
Multimedia compatibility
Developer tool compatibility
Hardware compatibility
Performance compatibility
Security model compatibility
Software compatibility testing
Updatable software
Compliance Test Suite
Development Setup and Tools
2. Internals Primer
App Developer’s View
Android Concepts
Components
Intents
Component lifecycle
Manifest file
Processes and threads
Remote procedure calls (RPCs)
Framework Intro
App Development Tools
Native Development
Overall Architecture
Linux Kernel
Wakelocks
Low-Memory Killer
Binder
Anonymous Shared Memory (ashmem)
Alarm
Logger
Other Notable Androidisms
Hardware Support
The Linux Approach
Android’s General Approach
Loading and Interfacing Methods
Device Support Details
Native User-Space
Filesystem Layout
Libraries
Init
Configuration language
Global properties
udev events
Toolbox
Daemons
Command-Line Utilities
Dalvik and Android’s Java
Java Native Interface (JNI)
System Services
Service Manager and Binder Interaction
Calling on Services
A Service Example: the Activity Manager
Stock AOSP Packages
System Startup
3. AOSP Jump-Start
Development Host Setup
Getting the AOSP
Inside the AOSP
Build Basics
Build System Setup
Building Android
Running Android
Using the Android Debug Bridge (ADB)
Mastering the Emulator
4. The Build System
Comparison with Other Build Systems
Architecture
Configuration
envsetup.sh
Function Definitions
Main Make Recipes
Cleaning
Module Build Templates
Output
Build Recipes
The Default droid Build
Seeing the Build Commands
Building the SDK for Linux and Mac OS
Building the SDK for Windows
Building the CTS
Building the NDK
Updating the API
Building a Single Module
Building Out of Tree
Building Recursively, In-Tree
Basic AOSP Hacks
Adding a Device
Adding an App
Adding an App Overlay
Adding a Native Tool or Daemon
Adding a Native Library
5. Hardware Primer
Typical System Architecture
The Baseband Processor
Core Components
Real-World Interaction
Connectivity
Expansion, Development, and Debugging
What’s in a System-on-Chip (SoC)?
Memory Layout and Mapping
Development Setup
Evaluation Boards
6. Native User-Space
Filesystem
The Root Directory
/system
/data
Multiuser support
SD Card
The Build System and the Filesystem
Build templates and file locations
Explicitly copying files
Default rights and ownership
adb
Theory of Operation
Main Flags, Parameters, and Environment Variables
Basic Local Commands
Device Connection and Status
Basic Remote Commands
Shell
Dumping the logs
Getting a bug report
Port forwarding
Dalvik debugging
Filesystem Commands
State-Altering Commands
Rebooting
Running as root
Switching connection type
Controlling the emulator
Tunneling PPP
Android’s Command Line
The Shell Up to 2.3/Gingerbread
The Shell Since 4.0/Ice-Cream Sandwich
Toolbox
Common Linux commands
Global properties
Input events
Controlling services
Logging
ioctl
Wiping the device
Other Android-specific commands
nandread
newfs_msdos
notify
r
schedtop
setconsole
smd
Core Native Utilities and Daemons
logcat
netcfg
debuggerd
Other Android-specific core utilities and daemons
check_prereq
linker
logwrapper
run-as
sdcard utility
Extra Native Utilities and Daemons
Framework Utilities and Daemons
Init
Theory of Operation
Configuration Files
Location
Semantics
Property-based triggers
Action commands
Service declarations
Service options
Main init.rc
Board-specific .rc files
Global Properties
Theory of operation
Nomenclature and sets
Storage
The build system
Additional property files
.rc files
Code
/data/property
ueventd
Boot Logo
7. Android Framework
Kick-Starting the Framework
Core Building Blocks
System Services
Boot Animation
bootanimation.zip
Disabling the boot animation
Dex Optimization
Apps Startup
Input methods
Persistent apps
Home screen
BOOT_COMPLETED intent
APPWIDGET_UPDATE intent
Utilities and Commands
General-Purpose Utilities
service
dumpsys
dumpstate
rawbu
Service-Specific Utilities
am
pm
svc
ime
input
monkey
bmgr
stagefright
Dalvik Utilities
dalvikvm
dvz
dexdump
Support Daemons
installd
vold
netd
rild
keystore
Other Support Daemons
Hardware Abstraction Layer
A. Legacy User-Space
Basics
Theory of Operation
Merging with the AOSP
Using the Combined Stacks
Caveats and Pending Issues
Moving Forward
B. Adding Support for New Hardware
The Basics
The System Service
The HAL and Its Extension
The HAL Module
Calling the System Service
Starting the System Service
Caveats and Recommendations
C. Customizing the Default Lists of Packages
Overall Dependencies
Assembling the Final PRODUCT_PACKAGES
Trimming Packages
D. Default init.rc Files
2.3/Gingerbread’s default init.rc
4.2/Jelly Bean’s Default init Files
init.rc
init.usb.rc
init.trace.rc
E. Resources
Websites and Communities
Google
SoC Vendors
Forks
Documentation and Forums
Embedded Linux Build Tools
Open Hardware Projects
Books
Conferences and Events
Index
About the Author
Colophon
Copyright
← Prev
Back
Next →
← Prev
Back
Next →