You are on page 1of 23

Android Build System and Overview

Karthik Dantu and Steve Ko


Administrivia

Show us your CyanogenMod!


Any issues in building?
Post your comments for both papers.
Android Build System & Source Tree

Todays goal
Getting to know the build system
Navigating the source tree
Resources
<android source root>/build/core/build-
system.html
http://elinux.org/
Embedded Android by Karim Yaghmour
Other sources: Android Building google groups
Git & Repo

AOSP is a set of repositories, each individually


managed by git.
If you dont know git, please go find out!
repo is a tool that manages multiple git repositories.
.repo directory: management files
Its actually another git repository.
repo init: just clones this repository.
repo sync: clones other repositories based on
manifest.xml file.
Try Out!

You might need to add your own repository for your


project.

$ cd .repo
$ ls al
$ cd manifests
$ vi default.xml
(vi or whatever editor)
$ git branch -a
Build Targets

Build name + build type (eng, user, & userdebug)


Generates different builds for different purposes
eng: produces an engineering build.
user: produces a release build.
userdebug: produces a release build plus some
limited debugging support.
Sets different system properties.
getprop, setprop
property_get(), property_set()
Build Targets

eng
adb enabled and runs as root by default
(ro.secure=0)
DDMS & debugger connection enabled
(ro.debuggable=1)
user
adb disabled by default & no debugging
userdebug
adb enabled (does not run as root) & debugging
support
Try Out!

You might want to define system-wide properties.

$ adb shell getprop


$ adb shell getprop ro.secure
$ adb shell getprop ro.debuggable
Build Environment

Useful commands after source-ing build/envsetup.sh


croot: cd to the source root.
m: make from the source root.
mm: make in the current module.
mmm: make whats specified.
cgrep, jgrep, mgrep: grep in C, Java, and
Makefiles.
godir: go to a directory that contains a file. (If
you run it, it will index first.)
printconfig: prints out the current configuration.
Try Out!

$ godir Android.mk
Make System

Combines
Build configuration (build/envsetup.sh & lunch)
Core .mk files (build/core/main.mk,
build/core/config.mk,
build/core/definitions.mk, build/core/Makefile,
etc.)
Product descriptions (AndroidProducts.mk & .mk
for the specific product)
Board description (BoardConfig.mk) files
Module description (Android.mk) files
Make Targets

make showcommands: shows all the make


commands as it goes on. (good for debugging)
make clobber: the cleanest removal.
make modules: shows all modules that can be built
individually.
make <module name>: builds just that module.
Android.mk: Makefile for a module.
LOCAL_MODULE is the target name for a module
Try Out!

$ make modules
$ cd dalvik/dalvikvm
$ vi Android.mk
Source Tree

abi: C/C++ Application Binary Interface


bionic: Androids C library
bootable: Things related to booting (bootloader,
installer, etc.)
build: Build tools and makefiles
cts: Compatibility Test Suite
dalvik: Dalvik VM
developers: Code samples
Source Tree

development: Tools, scripts, files related to


development (e.g., emulator, ndk, & sdk)
device: Device-specific files
docs: source.android.com docs
external: various tools/libraries from external
sources (other open source projects)
frameworks: the Android framework
Especially, base & base/core (android.* &
com.google.*)
Source Tree

hardware: Hardware support libraries, e.g., Wi-Fi,


framebuffers, etc.
libcore: Core Java libraries (java.*) mostly from
Apache Harmony VM
libnativehelper: Helper functions written in C/C++
ndk: Native Development Kit
packages: Essential APKs that gets installed, e.g.,
Browser, Phone, ContactsProvider, etc.
pdk: Platform Development Kit
Source Tree

prebuilts: Prebuilt tools for compiling (mainly for


cross-compiling)
sdk: Software Development Kit
system: Core system tools and libraries, e.g., adb,
fastboot, sh, init, logcat, wlan, liblog, & libcutils.
tools: Other external tools
vendor: Vendor-specific files
File System Structure

/boot: kernel image and ramdisk


/system: the Android system
/recovery: recovery image & space for the recovery
mode
/data: user data, e.g., apps (/data/app &
/data/data/<app name>), contacts, etc.
/cache: space for caching (apps can also use this
space.)
/misc: space for system settings
/sdcard: internal SD card (symlinked to /mnt/sdcard)
Other Pseudo File Systems

cgroup: Control Group for kernel parameters


/proc/cgroups
procfs: kernel live data, e.g., parameters,
processes...
/proc
sysfs: kernel objects, e.g., devices, FSes,
modules,
/sys
tmpfs: devices available
/dev
Try Out!

$ adb shell df
Architecture
Apps
APIs
System Services Java Libraries

Activity Manager android.*


Location Manager java.*
Dalvik, Zygote, Android Rumtime
JNI
Native Libraries Daemons Tools HAL

Linux Kernel with Android Extensions


(Wakelocks, Binder, lowmem, etc.)
Daemons

adbd: adb daemon


vold: volume manager daemon
rild: radio interface layer daemon
app_process: Zygote
servicemanager: manager for all services
Kernel Extensions

wakelocks
lowmem handler
Binder
ashmem (Anonymous Shared Memory)
Logger

You might also like