Progress Β· 0/7 phases
π π AOSP Master Checklist
5 min read Β· Notion
Track your complete AOSP learning journey. Work through phases sequentially.
π§ Phase 1 β Prerequisites & Environment
- Ubuntu machine ready with 250 GB+ disk
- Build dependencies installed (
apt-get) -
repotool installed - AOSP source synced (android-14 branch, ~100 GB)
-
source build/envsetup.sh&&lunch aosp_x86_64-engworking - Full AOSP build completed (
m) - Emulator runs successfully
-
adb shellworks into emulator - Comfortable with top-level directory structure
- Can use
cs.android.comfor code navigation - Read and understood a simple
Android.bpfile - Made a trivial code change + incremental build
ποΈ Phase 2 β Architecture & Source Code
- Can explain all 5 Android architecture layers
- Understand Soong (
Android.bp) vs Make (Android.mk) - Can build a single module with
mmm - Know purpose of:
frameworks/,system/,hardware/,art/,bionic/ - Read
SystemServer.javaand listed all services - Read
ActivityThread.javaβ understand main loop - Written and built a custom
Android.bpmodule - Understand what ART does, AOT vs JIT compilation
- Know what
bionicis (Android's libc)
π₯Ύ Phase 3 β Boot Process & Linux Kernel
- Can draw boot sequence: BootROM β Bootloader β Kernel β init β Zygote β SystemServer
- Understand BootROM vs Bootloader responsibilities
- Know Android-specific kernel additions: Binder, Wakelocks, LMK, ION, Ashmem
- Read
system/core/init/main.cpp - Understand
init.rcservice/action/trigger syntax - Know why Zygote exists and how forking saves startup time
- Read
ZygoteInit.javaβ understand class preloading - Read
SystemServer.javaβ listed bootstrap/core/other services - Used
adb shell psto identify PID 1, Zygote, SystemServer - Traced
startActivityto Zygote fork
π Phase 4 β HAL, Binder IPC & System Services
- Can explain Binder IPC flow (client proxy β kernel driver β stub)
- Know why Binder is faster than UNIX sockets for Android
- Understand
Parcelserialization - Written a basic AIDL interface + service implementation
- Read
IActivityManager.aidland traced a call - Understand
ServiceManageras a Binder name registry - Know Legacy HAL vs HIDL vs AIDL HAL differences
- Read a HIDL
.halinterface definition - Implemented a stub Legacy HAL module
- Registered a custom service in
SystemServer.java - Used
service listandservice callfrom adb shell
βοΈ Phase 5 β Framework Internals
- Can explain roles of AMS, WMS, PMS
- Traced
startActivity()from app toActivity.onCreate() - Read
ActivityRecord.javaandTask.java - Understand window hierarchy in WMS
- Know SurfaceFlinger's role vs WMS
- Traced APK install flow through PMS
- Understand
OomAdjusterβ process kill decisions - Understand
BroadcastQueuedispatch chain - Used
dumpsys activityto inspect AMS state - Used
dumpsys windowto inspect WMS state - Used
dumpsys package <app>to see parsed manifest - Modified a system service + incremental build
π Phase 6 β Customization, OTA & Contributing
- Understand SystemUI process components (statusbar, QS, lockscreen)
- Modified SystemUI (custom icon or QS tile)
- Understand A/B partition seamless update model
- Know OTA package generation pipeline
- Understand Android Verified Boot (AVB) and dm-verity
- Generated an OTA package with
m otapackage - Set up Gerrit account
- Know AOSP commit message format (
Bug:,Test:fields) - Studied LineageOS source for one custom feature
- Submitted or reviewed a change on Gerrit
π Bonus / Advanced Topics
- SELinux policies in Android (
system/sepolicy/) - Android Keystore and TEE (Trusted Execution Environment)
- Camera HAL3 architecture
- Audio HAL and AudioFlinger
- Graphics pipeline: OpenGL β Vulkan β SurfaceFlinger β HWC2
- Treble architecture (vendor interface / VNDK)
- Android App Sandbox and permissions model
- ART internals: dex2oat, garbage collector
- Android Automotive OS (AAOS)
- Fuchsia / Fuchsia driver model (Google's next-gen OS)
π Essential Reference Files
| File | Why It Matters |
|---|---|
system/core/init/main.cpp | First userspace process |
system/core/rootdir/init.rc | System service definitions |
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java | App process factory |
frameworks/base/services/java/com/android/server/SystemServer.java | All service launches |
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java | Activity/process mgmt |
frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java | Window management |
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java | APK management |
frameworks/base/core/java/android/app/ActivityThread.java | App main thread |
kernel/drivers/android/binder.c | Binder IPC kernel driver |
frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp | Display compositing |