RepoPilotOpen in app →

aosp-mirror/platform_frameworks_base

Mixed

Slowing — last commit 6mo ago

weakest axis
Use as dependencyConcerns

non-standard license (Other); no CI workflows detected

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

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 →
  • 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 ConcernsMixed 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.

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/aosp-mirror/platform_frameworks_base?axis=fork)](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:

  1. 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.
  2. 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.
  3. 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 |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>aosp-mirror/platform_frameworks_base</code></summary>
#!/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).

</details>

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

🛠️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

🪄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
  • [@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
  • 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.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · aosp-mirror/platform_frameworks_base — RepoPilot