Files
rea/experiments/analysis-efficiency/fixtures/android-components
gensokyo-dev 7e8f7f6101 feat(android): expose selected manifest component declarations (#7379)
Extend static manifest declarations and retain precise source locations and historical unknowns. Share bounded selected component views across CLI and MCP with complete parent Evidence.

Verified real ApiDemos, an AAPT2-built fixture, legacy Evidence, default-package metadata and relevant CLI/MCP contracts. Recorded whole-task token estimates, timing/resource limits and independent main-failure controls in the PR.

Co-authored-by: Harsh <johiyaharsh@gmail.com>
2026-10-27 12:37:10 +08:00
..

Static compiled-manifest fixture

These source-owned declarations cover URI data/filter association, exact resource references, metadata names, component process/enablement and provider URI grants. ManifestFixture.smali supplies a DEX container; it does not implement or execute the declared Android components. The verification uses existing AAPT2 36.1.0, Android 36 android.jar, JDK 21 and the digest-pinned JADX headless MCP 0.7.1 JAR. No Android device, emulator or app execution is involved.

From the repository root, choose existing AAPT2, ANDROID_JAR, JAVA_HOME and REA_JADX_MCP_JAR paths, then build into a fresh private directory:

fixture=experiments/analysis-efficiency/fixtures/android-components
work=$(mktemp -d)
"$AAPT2" compile --dir "$fixture/res" -o "$work/resources.zip"
"$AAPT2" link --manifest "$fixture/AndroidManifest.xml" -I "$ANDROID_JAR" \
  -o "$work/manifest.apk" "$work/resources.zip"
"$JAVA_HOME/bin/java" -Xmx512m -XX:ActiveProcessorCount=2 \
  -cp "$REA_JADX_MCP_JAR" "$fixture/BuildDex.java" \
  "$fixture/ManifestFixture.smali" "$work/classes.dex"
python3 - "$work" <<'PY'
from pathlib import Path
import sys, zipfile
root = Path(sys.argv[1])
with zipfile.ZipFile(root / "manifest.apk", "a") as apk:
    apk.write(root / "classes.dex", "classes.dex")
PY
"$AAPT2" dump xmltree --file AndroidManifest.xml "$work/manifest.apk" > "$work/aapt2-xmltree.txt"
"$AAPT2" dump resources "$work/manifest.apk" > "$work/aapt2-resources.txt"
REA_JADX_HEAP_MIB=1024 REA_JADX_ACTIVE_PROCESSOR_COUNT=2 \
  node scripts/rea.mjs inspect-android-package "$work/manifest.apk" \
  --detail summary --view '{"kind":"android","facet":"components"}' \
  --evidence_output "$work/evidence.json" --json > "$work/cli.json"
python3 "$fixture/verify-fixture.py" "$work"

verify-fixture.py cross-checks concrete compiled XML facts with the independent AAPT2 dump, structured CLI facts, parent APK identity and every retained manifest source location. It deliberately keeps resource declarations unresolved even though the resource table contains values. manifest-oracle.py is a separate stdlib ElementTree oracle used by the public MCP task driver. Generated binaries, Evidence and dumps stay outside Git.