aosp-mirror/platform_frameworks_base
Slowing — last commit 6mo ago
weakest axisnon-standard license (Other); no CI workflows detected
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 6mo ago
- ✓42+ active contributors
- ✓Distributed ownership (top contributor 27% of recent commits)
Show all 8 evidence items →Show less
- ✓Other licensed
- ✓Tests present
- ⚠Slowing — last commit 6mo ago
- ⚠Non-standard license (Other) — review terms
- ⚠No CI workflows detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: clarify license terms
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Forkable" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/aosp-mirror/platform_frameworks_base)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/aosp-mirror/platform_frameworks_base on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: aosp-mirror/platform_frameworks_base
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/aosp-mirror/platform_frameworks_base shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Slowing — last commit 6mo ago
- Last commit 6mo ago
- 42+ active contributors
- Distributed ownership (top contributor 27% of recent commits)
- Other licensed
- Tests present
- ⚠ Slowing — last commit 6mo ago
- ⚠ Non-standard license (Other) — review terms
- ⚠ No CI workflows detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live aosp-mirror/platform_frameworks_base
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/aosp-mirror/platform_frameworks_base.
What it runs against: a local clone of aosp-mirror/platform_frameworks_base — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in aosp-mirror/platform_frameworks_base | Confirms the artifact applies here, not a fork |
| 2 | License is still Other | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | Last commit ≤ 207 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of aosp-mirror/platform_frameworks_base. If you don't
# have one yet, run these first:
#
# git clone https://github.com/aosp-mirror/platform_frameworks_base.git
# cd platform_frameworks_base
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of aosp-mirror/platform_frameworks_base and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "aosp-mirror/platform_frameworks_base(\\.git)?\\b" \\
&& ok "origin remote is aosp-mirror/platform_frameworks_base" \\
|| miss "origin remote is not aosp-mirror/platform_frameworks_base (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Other)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Other\"" package.json 2>/dev/null) \\
&& ok "license is Other" \\
|| miss "license drift — was Other at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 207 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~177d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/aosp-mirror/platform_frameworks_base"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Android Framework Base (AOSP) is the core system framework for the Android operating system, implementing Java/Kotlin APIs that all Android apps and system services depend on. It provides essential subsystems: ActivityManager (app lifecycle), PackageManager (installation/permissions), WindowManager (UI rendering), BatteryStats, Telephony, and dozens of other OS-level services via AIDL interfaces. This is the foundation every Android device runs. Monorepo organized by subsystem: core/ contains base classes, services/ holds ActivityManager/WindowManager/PackageManager implementations, app/ has system app code, java/ contains framework API surface (organized by android.* package), native/ holds C++ JNI bindings, and aidl/ defines IPC contracts. Each major system (ACTIVITY_MANAGER_OWNERS, BATTERY_STATS_OWNERS) has independent ownership via OWNERS files.
👥Who it's for
Android platform engineers, OEM developers building custom ROMs, system framework maintainers at Google, and Android contributors fixing core OS bugs. Contributors work on system-level concerns (memory management, security policies, IPC) rather than app-level features.
🌱Maturity & risk
Extremely mature and production-critical: powers billions of Android devices globally. The codebase is ancient (originated pre-2008) with deep test coverage (perftests/ and apct-tests/ directories), continuous integration via Google's internal systems, and daily commits. Risk is managed by Google's strict code review process. This is as stable as software gets—breaking changes are exceedingly rare due to API compatibility guarantees.
Not risky in traditional sense (Google-maintained, well-tested), but risky to modify without deep Android knowledge: changes to ActivityManager or PackageManager can silently break millions of apps. The codebase is massive (256MB Java alone), with no clear deprecation path visible in file structure. Single-source-of-truth for Android means any regression here affects the entire ecosystem. AIDL interfaces (3.5MB) must maintain backward compatibility across Android versions.
Active areas of work
Active development on aconfig feature flags (AconfigFlags.bp, android-sdk-flags/), Ravenwood testing infrastructure (Ravenwood.bp for faster testing), and ongoing hardening of permission/security systems (visible via ACTIVITY_SECURITY_OWNERS, LSE_APP_COMPAT_OWNERS). Recent work on ADPF (Adaptive Performance Framework) and Game Manager subsystems visible in OWNERS files.
🚀Get running
Clone: git clone https://android.googlesource.com/platform/frameworks/base (requires authenticated access to AOSP). Build: m framework (uses Soong build system, not Gradle). Full Android build requires: repo init -u https://android.googlesource.com/platform/manifest && repo sync then source build/envsetup.sh && lunch && m. Expect 30-60 minutes and 100GB+ disk space.
Daily commands:
Not a runnable app—only builds as framework.jar library. Test via: atest FrameworksBaseTests or m CtsFrameworkTests for CTS compliance tests. Performance profiling: atest apct-tests/perftests/aconfig/. Run Ravenwood fast tests: m ravenwood-run. Full system validation requires building complete ROM: m (full build command).
🗺️Map of the codebase
- services/core/java/com/android/server/SystemServer.java: Boots all system services; any change here affects entire platform startup
- core/java/android/app/ActivityManager.java: Public API surface for app lifecycle; any API change requires API council review
- core/java/android/content/pm/PackageManager.java: Package installation, permission grants, and app discovery APIs; breakage affects app ecosystem
- Android.bp: Master build config defining framework.jar and all test targets; controls what gets built
- AIDL_OWNERS: Defines approval requirements for IPC contract changes (likely affects Android interop)
- AconfigFlags.bp: Feature flag infrastructure for staged rollouts; growing pattern for managing system changes
- services/core/java/com/android/server/wm/WindowManagerService.java: Core display/window composition logic; touches nearly every visual feature on Android
🛠️How to make changes
Java framework APIs: edit files under java/android/ (e.g., java/android/app/ActivityManager.java). System services: edit services/core/java/com/android/server/ (e.g., services/core/java/com/android/server/am/ActivityManagerService.java). AIDL interfaces: modify .aidl files and regenerate stubs. Add tests in corresponding tests/ directory. Always check OWNERS file for required reviewers.
🪤Traps & gotchas
AIDL interfaces must maintain backward compatibility across multiple Android versions—renaming a field breaks older clients. Framework changes require API council review (hidden gate, not in repo). Binder RPC calls have strict 1MB transaction size limit (causes silent failures if exceeded). SystemServer runs as system_server UID with special privileges—permission errors in framework code are non-obvious. Build system expects ANDROID_BUILD_TOP and lunch target set (source build/envsetup.sh required). ProtoLibraries.bp implies proto compatibility constraints not obvious from file diffs.
💡Concepts to learn
- Binder IPC (Inter-Process Communication) — Framework's entire system service architecture (ActivityManager, WindowManager, PackageManager) communicates via Binder RPC through AIDL interfaces; understanding Binder transaction limits and marshalling is essential for modifying system services
- AIDL (Android Interface Definition Language) — All framework service contracts are defined in AIDL; changing AIDL requires understanding backward compatibility and version evolution to avoid breaking apps
- Handler/Looper message dispatch — Framework services (ActivityManager, WindowManager) process all lifecycle events asynchronously via Handler posts; understanding message ordering is critical for race condition bugs
- SystemServer and service initialization — All system services boot from SystemServer.java in strict order; modifying service startup order or dependencies can cause cascade failures during system boot
- Permission model (RBAC + SELinux) — Framework enforces Android's dual permission system (Java permissions + SELinux policies); security changes require coordinated updates across framework and sepolicy repos
- Soong build system (Kati/Ninja) — Framework builds with Soong (Android.bp files), not Gradle; understanding build module dependencies and phony targets is needed to debug build errors
- API stability and @hide annotations — Framework maintains backward-compatible public APIs via @hide annotations and API councils; removing @hide or changing public method signatures requires API review and can block releases
🔗Related repos
aosp-mirror/platform_system_sepolicy— SELinux policies that enforce security model for framework services; must align with framework code changesaosp-mirror/platform_hardware_interfaces— HAL definitions that framework binds to; framework changes often require HAL interface updatesaosp-mirror/platform_packages_apps_SystemUI— System UI app that directly uses framework APIs and system service calls; primary consumer of framework changesaosp-mirror/platform_frameworks_native— Native framework (libbinder, libutils) that framework Java layer depends on; IPC implementation detailsaosp-mirror/platform_manifest— Repo manifest defining which framework branches to sync; required for setting up local AOSP build
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add comprehensive unit tests for AconfigPackagePerfTest and autofill performance tests
The repo contains performance test infrastructure (apct-tests/perftests/) with existing test files like AconfigPackagePerfTest.java and autofill performance tests, but lacks comprehensive unit test coverage. These performance tests need dedicated unit tests to verify metrics collection, baseline comparisons, and regression detection. This is critical for a framework repo where performance regressions can impact all Android applications.
- [ ] Create unit test suite for apct-tests/perftests/aconfig/src/android/os/flagging/AconfigPackagePerfTest.java to verify metric collection and assertions
- [ ] Create unit test suite for apct-tests/perftests/autofill/src/android/view/autofill/ test helpers (AbstractAutofillPerfTestCase.java and AutofillTestHelper.java)
- [ ] Add TEST_MAPPING entries for these new test suites to ensure they run in CI/CD
- [ ] Document performance test expectations in apct-tests/perftests/OWNERS and add baseline metrics
Implement missing OWNERS files and governance documentation for core subsystems
The repo has multiple OWNERS files for specific subsystems (ACTIVITY_MANAGER_OWNERS, BATTERY_STATS_OWNERS, etc.) but several critical directories lack OWNERS files or clear ownership. apct-tests/perftests/aconfig/ and apct-tests/perftests/autofill/ have OWNERS files but higher-level directories may lack clarity. Establishing clear ownership improves code review quality and prevents knowledge silos in this massive framework codebase.
- [ ] Audit apct-tests/perftests/ directory structure and ensure all subdirectories have appropriate OWNERS files referencing OWNERS.md governance rules
- [ ] Review and update OWNERS.md to document specific approval requirements for performance-critical subsystems (aconfig, autofill, activity manager)
- [ ] Add OWNERS entries for android-sdk-flags/ directory to clarify who approves SDK-facing flag changes
- [ ] Create a CONTRIBUTING.md file that references subsystem-specific OWNERS and TEST_MAPPING to guide new contributors
Add CI workflow validation for prebuilt_info integrity across architectures
The .prebuilt_info/ directory contains architecture-specific protobuf files (arm, x86, riscv64) for CtsShim APKs. There's no visible validation that these prebuilt metadata files remain synchronized across architectures or match actual APK contents. This can cause subtle test failures or inconsistent behavior across Android device architectures.
- [ ] Create validation script in root directory (e.g., scripts/validate_prebuilt_info.py) to verify .prebuilt_info/*.asciipb files are consistent across all architecture variants (arm, x86, riscv64)
- [ ] Add schema validation to ensure .prebuilt_info/*.asciipb files conform to expected protobuf structure
- [ ] Add PREUPLOAD.cfg hook to run validation before commits (reference existing PREUPLOAD_OWNERS for approval process)
- [ ] Document expected architecture variants in .prebuilt_info/OWNERS and add comments explaining CtsShim APK versioning strategy
🌿Good first issues
- Add missing documentation to AIDL interfaces under core/aidl/ (description blocks for transaction codes, missing @hide annotations). Visible gap: no README explaining AIDL versioning strategy.
- Write integration tests for ActivityManager lifecycle transitions (ActivityManagerService already exists but TEST_MAPPING suggests coverage gaps). Check: apct-tests/perftests/aconfig/ has no tests for basic app start/stop flows.
- Audit OWNERS files for unmaintained subsystems (THERMAL_OWNERS, ADPF_OWNERS) and consolidate under active owners. Many single-person owner entries visible in file list.
⭐Top contributors
Click to expand
Top contributors
- [@Treehugger Robot](https://github.com/Treehugger Robot) — 27 commits
- @lijilou — 6 commits
- [@Wei Li](https://github.com/Wei Li) — 4 commits
- [@Fabien Sanglard](https://github.com/Fabien Sanglard) — 4 commits
- [@Yan Yan](https://github.com/Yan Yan) — 4 commits
📝Recent commits
Click to expand
Recent commits
1cdfff5— Merge "Remove Redundant Variable for getStatusBarHeightForRotation" into main (Treehugger Robot)f422b0d— Merge "Make Vpn JNI registration lazy" into main (Treehugger Robot)3bd992d— Remove Redundant Variable for getStatusBarHeightForRotation (Weihao Xia)e8c036a— Merge "Use adb_auth channel to send TLS Server port" into main (Treehugger Robot)90a150c— Merge "VideoThumbnail: improve thumbnailTimeUs." into main (Treehugger Robot)6e3c2ac— Merge "audio: Align api2aidl_NativeType_AudioDeviceDescription with native" into main (Treehugger Robot)59ed744— VideoThumbnail: improve thumbnailTimeUs. (guochuang)5704fa0— Merge "services: Use d8 on eng builds." into main (Treehugger Robot)d7e56a6— audio: Align api2aidl_NativeType_AudioDeviceDescription with native (Mikhail Naganov)edb2936— services: Use d8 on eng builds. (lamontj)
🔒Security observations
Unable to provide a comprehensive security assessment due to incomplete analysis data. The provided file structure shows only directory listings without source code, dependency files, or configuration details. This is the AOSP Framework Base repository, which is security-critical and requires thorough analysis of actual code implementation, dependency management, cryptographic implementations, and inter-process communication mechanisms. A complete security review would require access to: (1) dependency management files (Android.bp, build.gradle), (2) actual Java/C++ source code, (3) native library bindings, (4) permission declarations, (5) encryption implementations, and (6) IPC/Binder interfaces. Recommend performing a complete static analysis scan using tools like Sonarqube, FindBugs, and Android Studio's built-in lint tools.
- Medium · Incomplete Security Analysis Data —
Repository root. The provided file structure and dependencies are incomplete, preventing comprehensive security analysis. Only file listings and directory names are available without access to actual code content, configuration files, or dependency declarations. Fix: Provide complete access to source files, dependency files (build.gradle, Android.bp, pom.xml, etc.), configuration files, and security-critical components for thorough analysis. - Low · Large Codebase with Complex Attack Surface —
Repository structure (aosp-mirror/platform_frameworks_base). This is the Android Framework Base repository (AOSP), a large and complex codebase that handles security-sensitive operations. The framework's size and complexity increase potential attack surface. Fix: Implement continuous security scanning, maintain active vulnerability management program, conduct regular security audits, and apply principle of least privilege across all modules. - Low · Test and Performance Test Exposure —
apct-tests/ directory structure. The presence of test code (apct-tests) and performance tests may inadvertently expose implementation details or contain test data that could be security-sensitive. Fix: Ensure test code does not contain hardcoded credentials, sensitive data, or security-bypassing test utilities. Use obfuscation and remove test code from production builds.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.