From e4de1b6c9b922e8ff881a426f09083d420db195a Mon Sep 17 00:00:00 2001 From: PROPGSP <148640805+PROPGSP@users.noreply.github.com> Date: Mon, 23 Jun 2025 19:59:40 +0530 Subject: [PATCH] added frameworks/ --- aosp-source-tree.md | 219 ++++++++++++++++++++++++++------------------ 1 file changed, 129 insertions(+), 90 deletions(-) diff --git a/aosp-source-tree.md b/aosp-source-tree.md index 042fa2d..943a3b5 100644 --- a/aosp-source-tree.md +++ b/aosp-source-tree.md @@ -1,8 +1,8 @@ -###### AOSP Source tree +# AOSP Source tree Let’s take our first confident step into the world of Android’s internals. -#### Understanding the AOSP Source Tree Structure +## Understanding the AOSP Source Tree Structure Im going explain the things first and then put you hands on the source so slow down you curiosity and stabilize you brain to learn. @@ -50,262 +50,301 @@ Depending on the branch or target (like Pixel or emulator), you might also see: -### 1. `art/` – Android Runtime +##### 1. `art/` – Android Runtime -- **Purpose:** Contains the source code for ART, which replaced the Dalvik VM. +- ***Purpose:*** Contains the source code for ART, which replaced the Dalvik VM. -- **Key Components:** +- ***Key Components:*** - `runtime/`: Core of the ART virtual machine. - `compiler/`: ART’s optimizing compiler for converting DEX to native code. - `oat/`, `dex2oat/`: Tools and formats for ahead-of-time compilation. -- **Why it matters:** ART is what executes your Android apps. Just an runtime program to be simple. +- ***Why it matters:*** ART is what executes your Android apps. Just an runtime program to be simple. -### 2. `bionic/` – C Runtime (libc) +##### 2. `bionic/` – C Runtime (libc) -- **Purpose:** Android’s custom implementation of the C standard library (`libc`, `libm`, `libdl`). +- ***Purpose:*** Android’s custom implementation of the C standard library (`libc`, `libm`, `libdl`). -- **Key Components:** +- ***Key Components:*** - `libc/`: The lightweight libc optimized for embedded use. - `tests/`: Unit tests ensuring standard behavior. -- **Why it matters:** Every native app and system service relies on this for basic memory, string, and math operations. +- ***Why it matters:*** Every native app and system service relies on this for basic memory, string, and math operations. -### 3. `bootable/` – Bootloader & Recovery +##### 3. `bootable/` – Bootloader & Recovery -- **Purpose:** Contains source for Android bootloader parts and the recovery mode. +- ***Purpose:*** Contains source for Android bootloader parts and the recovery mode. -- **Key Components:** +- ***Key Components:*** - `bootloader/`: Minimal code to boot up the system on some devices. - `recovery/`: Source code for stock recovery image. -- **Why it matters:** The first line of code that runs after powering on, before the kernel. +- ***Why it matters:*** The first line of code that runs after powering on, before the kernel. -### 4. `build/` – Build System +##### 4. `build/` – Build System -- **Purpose:** Core build scripts using Make, Soong, and other tools. +- ***Purpose:*** Core build scripts using Make, Soong, and other tools. -- **Key Components:** +- ***Key Components:*** - `build/make/`: Classic Makefiles and product configs. - `build/soong/`: The new build system in Go. -- **Why it matters:** You can’t compile Android without this—defines how everything is put together. +- ***Why it matters:*** You can’t compile Android without this—defines how everything is put together. -### 5. `compatibility/` and `cts/` – Compatibility Testing +##### 5. `compatibility/` and `cts/` – Compatibility Testing -- **Purpose:** Enforce Android ecosystem standards across OEMs. +- ***Purpose:*** Enforce Android ecosystem standards across OEMs. -- **Key Components:** +- ***Key Components:*** - `cts/`: Compatibility Test Suite sources. - `vts/`, `gts/`: Vendor and Google test suites. -- **Why it matters:** Ensures your device behaves like any other Android-compliant one. +- ***Why it matters:*** Ensures your device behaves like any other Android-compliant one. -### 6. `dalvik/` – Legacy Runtime +##### 6. `dalvik/` – Legacy Runtime -- **Purpose:** Original Android runtime, replaced by ART but still kept around for historical reasons or backward compatibility testing. +- ***Purpose:*** Original Android runtime, replaced by ART but still kept around for historical reasons or backward compatibility testing. -- **Key Components:** +- ***Key Components:*** - `vm/`: Dalvik Virtual Machine internals. -- **Why it matters:** It was Android’s first runtime environment. Studying it can give you context for ART’s improvements. +- ***Why it matters:*** It was Android’s first runtime environment. Studying it can give you context for ART’s improvements. -### 7. `development/` – Platform Dev Tools +##### 7. `development/` – Platform Dev Tools -- **Purpose:** Houses sample projects, SDK tools, and various utilities. +- ***Purpose:*** Houses sample projects, SDK tools, and various utilities. -- **Key Components:** +- ***Key Components:*** - `apps/`: Test apps like Dev Tools and spare launchers. - `scripts/`: Helper scripts for developers (e.g., systrace, profiling). -- **Why it matters:** Great for exploring how developers debug and experiment with Android features. +- ***Why it matters:*** Great for exploring how developers debug and experiment with Android features. -### 8. `device/` – Device-Specific Configs +##### 8. `device/` – Device-Specific Configs -- **Purpose:** Contains configuration files for supported devices (like Pixel, emulator, etc.). +- ***Purpose:*** Contains configuration files for supported devices (like Pixel, emulator, etc.). -- **Key Components:** +- ***Key Components:*** - `device/google/`: Pixel configuration examples. - `BoardConfig.mk`, `device.mk`: Setup how the build system understands the hardware. -- **Why it matters:** This is where you customize for new hardware — essential for custom ROMs. Also where you put those configurations of your motherborad, camera,... like devices info to make the AOSP to build for it. +- ***Why it matters:*** This is where you customize for new hardware — essential for custom ROMs. Also where you put those configurations of your motherborad, camera,... like devices info to make the AOSP to build for it. -### 9. `external/` – Third-Party Libraries +##### 9. `external/` – Third-Party Libraries -- **Purpose:** Bundles open-source software Android depends on. +- ***Purpose:*** Bundles open-source software Android depends on. -- **Examples:** +- ***Examples:*** - `openssl/`, `zlib/`, `libpng/`, `clang/` -- **Why it matters:** Keeps all upstream dependencies organized and versioned in sync with AOSP. Like the tolls used to dig a hole. here these are to build and streamline our experience while developing. +- ***Why it matters:*** Keeps all upstream dependencies organized and versioned in sync with AOSP. Like the tolls used to dig a hole. here these are to build and streamline our experience while developing. -### 10. `frameworks/` – The Android Framework +##### 10. `frameworks/` – The Android Framework -- **Purpose:** Java-based layer that provides high-level services used by apps. +- ***Purpose:*** Java-based layer that provides high-level services used by apps. -- **Key Components:** +- ***Key Components:*** - `base/`: Core framework — ActivityManager, WindowManager, ContentProviders, etc. - `av/`: Media framework. - `native/`: Native services and JNI bindings. -- **Why it matters:** If you want to modify system behavior, this is *the* place. You can optimize the performance by using your cutting edge skills by modifying things inside it. +- ***Why it matters:*** If you want to modify system behavior, this is *the* place. You can optimize the performance by using your cutting edge skills by modifying things inside it. -### 11. `hardware/` – Hardware Abstraction Layer (HAL) +##### 11. `hardware/` – Hardware Abstraction Layer (HAL) -- **Purpose:** Interface between Android and device hardware. +- ***Purpose:*** Interface between Android and device hardware. -- **Key Components:** +- ***Key Components:*** - Subfolders like `interfaces/`, `libhardware/`, `google/` - Contains HIDL/AIDL definitions and implementations. -- **Why it matters:** Lets Android talk to device-specific hardware without hardcoding vendor logic into the OS. +- ***Why it matters:*** Lets Android talk to device-specific hardware without hardcoding vendor logic into the OS. -### 12. `kernel/` – Linux Kernel (if present) +##### 12. `kernel/` – Linux Kernel (if present) -- **Purpose:** Kernel source trees for devices (optional — some are pulled externally). +- ***Purpose:*** Kernel source trees for devices (optional — some are pulled externally). -- **Key Components:** +- ***Key Components:*** - Typically named `kernel/google/msm/` or similar. -- **Why it matters:** It’s the base of Android. You can modify schedulers, drivers, or build your own kernel. +- ***Why it matters:*** It’s the base of Android. You can modify schedulers, drivers, or build your own kernel. -### 13. `libcore/` – Java Core Libraries +##### 13. `libcore/` – Java Core Libraries -- **Purpose:** Provides foundational Java packages (`java.util`, `java.io`, etc.). +- ***Purpose:*** Provides foundational Java packages (`java.util`, `java.io`, etc.). -- **Key Components:** +- ***Key Components:*** - `luni/`: Core libraries (`java.lang`, etc.) - `ojluni/`: Merged OpenJDK libraries. -- **Why it matters:** Every Java app on Android relies on this — it’s the bedrock of the language APIs. +- ***Why it matters:*** Every Java app on Android relies on this — it’s the bedrock of the language APIs. -### 14. `packages/` – System Apps +##### 14. `packages/` – System Apps -- **Purpose:** Hosts the source code for system apps and UI components. +- ***Purpose:*** Hosts the source code for system apps and UI components. -- **Key Examples:** +- ***Key Examples:*** - `Settings/`, `SystemUI/`, `Launcher3/` -- **Why it matters:** This is where things like the lock screen, Quick Settings, and launcher behavior live. You can add most required apps that you want to be preloaded. +- ***Why it matters:*** This is where things like the lock screen, Quick Settings, and launcher behavior live. You can add most required apps that you want to be preloaded. -### 15. `platform_testing/` – Testing Infrastructure +##### 15. `platform_testing/` – Testing Infrastructure -- **Purpose:** Platform-wide test runners, benchmarking, and test coordination scripts. +- ***Purpose:*** Platform-wide test runners, benchmarking, and test coordination scripts. -- **Why it matters:** Ensures platform stability with continuous testing across modules. +- ***Why it matters:*** Ensures platform stability with continuous testing across modules. -### 16. `prebuilts/` – Precompiled Tools +##### 16. `prebuilts/` – Precompiled Tools -- **Purpose:** Tools and binaries that don’t need to be built from source (e.g., clang, aapt). +- ***Purpose:*** Tools and binaries that don’t need to be built from source (e.g., clang, aapt). You can also make or modify and use your it as you wish but its kinda hardcoding skills needed i recommend to stick with aosp ones as they are stable. -- **Structure:** +- ***Structure:*** - `clang/`, `gcc/`, `sdk/`, `tools/` -- **Why it matters:** These speed up builds and ensure consistent toolchains. +- ***Why it matters:*** These speed up builds and ensure consistent toolchains. -### 17. `sdk/` – Android SDK -- **Purpose:** Contains parts of the Software Development Kit used by app developers. +##### 17. `sdk/` – Android SDK +- ***Purpose:*** Contains parts of the Software Development Kit used by app developers. -- **Key Components:** +- ***Key Components:*** - APIs, emulator images, tools like `aapt`, `dx`, and more. -- **Why it matters:** This is how Android app devs build, package, and test their apps using the platform you’re modifying. +- ***Why it matters:*** This is how Android app devs build, package, and test their apps using the platform you’re modifying. -### 18. `system/` – Core Android System +##### 18. `system/` – Core Android System -- **Purpose:** One of the *most important* folders — includes Android’s `init`, core utilities, security policies, and daemon logic. +- ***Purpose:*** One of the *most important* folders — includes Android’s `init`, core utilities, security policies, and daemon logic. -- **Key Components:** +- ***Key Components:*** - `core/`: Native system components. - `sepolicy/`: SELinux rules for enforcing mandatory access control. - `init/`: The native `init` process implementation. -- **Why it matters:** Everything from system service spawning to filesystem mounting begins here. +- ***Why it matters:*** Everything from system service spawning to filesystem mounting begins here. -### 19. `test/` – Unit & Integration Testing +##### 19. `test/` – Unit & Integration Testing -- **Purpose:** Used for testing Android components at the system level. +- ***Purpose:*** Used for testing Android components at the system level. -- **Includes:** +- ***Includes:*** - JUnit-based unit tests, integration frameworks, shell test runners. -- **Why it matters:** Ensures reliability when changes are made to core components. +- ***Why it matters:*** Ensures reliability when changes are made to core components. -### 20. `toolchain/` – Compiler Infrastructure +##### 20. `toolchain/` – Compiler Infrastructure -- **Purpose:** Holds source and configs for GCC/Clang-based toolchains. +- ***Purpose:*** Holds source and configs for GCC/Clang-based toolchains. -- **Why it matters:** You might not need to edit this often, but it defines the compilers used when building native code. +- ***Why it matters:*** You might not need to edit this often, but it defines the compilers used when building native code. -### 21. `tools/` – Build Tools and Utilities +##### 21. `tools/` – Build Tools and Utilities -- **Purpose:** Miscellaneous tools used for code analysis, linting, SDK packaging, etc. +- ***Purpose:*** Miscellaneous tools used for code analysis, linting, SDK packaging, etc. -- **Notable Subdirs:** +- ***Notable Subdirs:*** - `repohooks/`, `lint/`, `apkzlib/` -- **Why it matters:** Improves code quality and build consistency across the platform. +- ***Why it matters:*** Improves code quality and build consistency across the platform. -### 22. `vendor/` – Proprietary Vendor Code +##### 22. `vendor/` – Proprietary Vendor Code -- **Purpose:** Non-open-source components and binaries provided by chipset vendors or OEMs. +- ***Purpose:*** Non-open-source components and binaries provided by chipset vendors or OEMs. -- **Why it matters:** The bridge between AOSP and real hardware. If you want to port Android to a new device, you’ll need matching vendor blobs here. +- ***Why it matters:*** The bridge between AOSP and real hardware. If you want to port Android to a new device, you’ll need matching vendor blobs here. -### (Optional) `product/`, `vndk/`, `common/`, `soong/` -- **Seen in some branches or manifests.** +##### (Optional, later will get to know) `product/`, `vndk/`, `common/`, `soong/` +- ***Seen in some branches or manifests.*** - `product/`: Used for `/product` partition overlays. - `vndk/`: Vendor Native Development Kit under Project Treble. - `common/`: Shared code across multiple device platforms. - `soong/`: Standalone directory for the Soong build system, in some branches. +--- +## ***Deeper Look Into Some Important Directories*** +--- + +Let’s roll on, Srinivasa — this time zooming into some of the ***most important internal folders*** of the AOSP tree. Since we finished the top-level overview, I’ll now guide you into the internal structures of key folders, one at a time. + +Let’s begin with: + +##### `frameworks/` – The Beating Heart of Android APIs + +This directory is where the ***Android SDK APIs***, system services, and many Java-side frameworks live. It’s vast, so here’s how it breaks down: + +| Subdirectory | Purpose | +|-------------------------------|---------| +| `base/` | Core of the Android framework — `ActivityManager`, `SystemServer`, `ContextImpl`, etc. | +| `native/` | Native system components (e.g., SurfaceFlinger, input system). | +| `av/` | Media framework: audio/video playback, camera services. | +| `opt/` | Optional modules, often experiments or new subsystems (like `telephony`). | +| `ml/` | Android ML interfaces and integration points for hardware acceleration. | +| `support/` | Legacy support libraries (mostly deprecated now). | +| `rs/` | RenderScript (deprecated, but still present in older branches). | + +Within `frameworks/base/`, you’ll find even more subdivisions: +- `core/java/` → Public and hidden Java APIs. +- `services/` → System services like ActivityManager, WindowManager. +- `cmds/` → Entrypoints like `app_process` (where Zygote starts). +- `startop/`, `telephony/`, `location/` → Domain-specific services. + +You’ll basically live inside `base/` if you're customizing Android behavior at the system level. -Mostly this is much you learnt is enough for now but you might need to learn the much deep inside each folders when it comes to customizing, but no worries i will take care of it. I will also tell you how to customize of things and behaviours later on upcoming chapters. Stay Tuned! \ No newline at end of file + + + + + + + + + + +Mostly this is much you learnt is enough for now but you might need to learn the much deep inside each folders when it comes to customizing, but no worries i will take care of it. I will also tell you how to customize of things and behaviours later on upcoming chapters. Stay Tuned!