5. ● AOSP is not a single project.
● Hundreds of independent projects having own Git repositories.
● Don't need to pull the projects one by one. Repo tool for the
rescue.
● AOSP manifest file to download a snapshot.
● Android Documentation: Downloading the source tree
http://source.android.com/source/downloading.html
7. bionic Android's C library.
bootable Legacy Bootloader/Recovery code for reference
build AOSP Build framework
cts Android's Compatibility Test Suit
dalvik Dalvik Virtual Machine
development Development tools #tutorials #monkey
device Vendor specific configuration files
external External projects used in AOSP
frameworks Android core application framework
hardware Hardware specific libraries/modules #HAL
kernel Linux Kernel
libcore Apache Harmony. Fee Java implementation. Used by
Dalvik.
ndk Native Development Kit
packages AOSP's stock applications
prebuilt Prebuilt binaries such as Toolchain
sdk Android's Software Development Kit
system Android's core system libraries/binaries #init #toolbox #adb
9. ● Android patches are not available mainline.
● android-common project
→ Android patches on top of Linus's base tree.
● Extract patches and apply them to your Target specific
kernel.
11. ● Binder
→ Android's IPC mechanism. Inspired from Open Binder project.
● Ashmem or Anonymous Shared Memory
→ Shared memory allocator. Discards shared units under memory pressure.
● Logger
→ Android's driver which logs data from user space.
● Wakelocks
→ Prevents a system to enter suspend or low power states.
● Out Of Memory handler
→ Aggressive OOM handler. Triggers before Kernel's default
implementation.
● Alarm
→ Android's alarm timer implementation on top of Kernel's RTC
implementation.
● RAM console
→ Logs last Kernel log. Accessible through /proc/last_kmsg
● Paranoid network
→ Network administration through uid/pid e.g AID_NET_*
17. ● Build config files
● Target build requirements are set by build/core/{main.mk,
config.mk, product.mk, product_config.mk}
● Build process looks for target specific config file
BoardConfig.mk at device/*/$(TARGET_DEVICE) or vendor/*/$
(TARGET_DEVICE)
● TARGET_PRODUCT = TARGET_DEVICE =
PRODUCT_DEVICE, where PRODUCT_DEVICE is defined in
AndroidProducts.mk
● Android Run time config files init.rc, init.TARGET_PRODUCT.rc,
ueventd.rc, ueventd.TARGET_PRODUCT.rc, vold.fstab etc
● Set optional PRODUCT_PACKAGES for Pre-loaded applications.
● Generate Project manifest file. It is different from an Android
Application Manifest file.
19. ● Android Documentation: Building the system
http://source.android.com/source/building.html
● $ . build/envsetup.sh
→ Setting up build environment
● $ lunch
→ Choose correct TARGET_PRODUCT
● $ export USE_CCACHE = 1
→ will cache object files generated by the C/C++ compiler which can
be used to speed up next build.
● $ make -jX
→ where X = “the number of CPU cores in your build machine” + 1.
OR
● $ mm
→ make alias which is handy while building AOSP projects
independently.