added frameworks/
This commit is contained in:
@ -1,8 +1,8 @@
|
|||||||
###### AOSP Source tree
|
# AOSP Source tree
|
||||||
Let’s take our first confident step into the world of Android’s internals.
|
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.
|
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.
|
- `runtime/`: Core of the ART virtual machine.
|
||||||
- `compiler/`: ART’s optimizing compiler for converting DEX to native code.
|
- `compiler/`: ART’s optimizing compiler for converting DEX to native code.
|
||||||
- `oat/`, `dex2oat/`: Tools and formats for ahead-of-time compilation.
|
- `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.
|
- `libc/`: The lightweight libc optimized for embedded use.
|
||||||
- `tests/`: Unit tests ensuring standard behavior.
|
- `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.
|
- `bootloader/`: Minimal code to boot up the system on some devices.
|
||||||
- `recovery/`: Source code for stock recovery image.
|
- `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/make/`: Classic Makefiles and product configs.
|
||||||
- `build/soong/`: The new build system in Go.
|
- `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.
|
- `cts/`: Compatibility Test Suite sources.
|
||||||
- `vts/`, `gts/`: Vendor and Google test suites.
|
- `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.
|
- `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.
|
- `apps/`: Test apps like Dev Tools and spare launchers.
|
||||||
- `scripts/`: Helper scripts for developers (e.g., systrace, profiling).
|
- `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.
|
- `device/google/`: Pixel configuration examples.
|
||||||
- `BoardConfig.mk`, `device.mk`: Setup how the build system understands the hardware.
|
- `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/`
|
- `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.
|
- `base/`: Core framework — ActivityManager, WindowManager, ContentProviders, etc.
|
||||||
- `av/`: Media framework.
|
- `av/`: Media framework.
|
||||||
- `native/`: Native services and JNI bindings.
|
- `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/`
|
- Subfolders like `interfaces/`, `libhardware/`, `google/`
|
||||||
- Contains HIDL/AIDL definitions and implementations.
|
- 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.
|
- 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.)
|
- `luni/`: Core libraries (`java.lang`, etc.)
|
||||||
- `ojluni/`: Merged OpenJDK libraries.
|
- `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/`
|
- `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.
|
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/`
|
- `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
|
##### 17. `sdk/` – Android SDK
|
||||||
- **Purpose:** Contains parts of the Software Development Kit used by app developers.
|
- ***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.
|
- 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.
|
- `core/`: Native system components.
|
||||||
- `sepolicy/`: SELinux rules for enforcing mandatory access control.
|
- `sepolicy/`: SELinux rules for enforcing mandatory access control.
|
||||||
- `init/`: The native `init` process implementation.
|
- `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.
|
- 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/`
|
- `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/`
|
##### (Optional, later will get to know) `product/`, `vndk/`, `common/`, `soong/`
|
||||||
- **Seen in some branches or manifests.**
|
- ***Seen in some branches or manifests.***
|
||||||
- `product/`: Used for `/product` partition overlays.
|
- `product/`: Used for `/product` partition overlays.
|
||||||
- `vndk/`: Vendor Native Development Kit under Project Treble.
|
- `vndk/`: Vendor Native Development Kit under Project Treble.
|
||||||
- `common/`: Shared code across multiple device platforms.
|
- `common/`: Shared code across multiple device platforms.
|
||||||
- `soong/`: Standalone directory for the Soong build system, in some branches.
|
- `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!
|
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!
|
Reference in New Issue
Block a user