{"id":53599,"plugin_id":"plugins_6abcb949170081919055247eaf18cfc0","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:54:35.178Z","digest":"bf392bd28f5014b803956a3490c048cf305773f06dcc36476436a985659480cf","against":null,"payload":{"description":"Investigate Android Java, Kotlin, native, and process memory using repeatable flows, meminfo, heap dumps, retaining paths, heapprofd, and before-after evidence without confusing growth with proof.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":227},{"relative_path":"scripts/analyze_meminfo_series.py","size_in_bytes":7164},{"relative_path":"scripts/capture_android_memory.sh","size_in_bytes":3111}],"name":"android-memory-leaks","skill_md_contents":"---\nname: android-memory-leaks\ndescription: Investigate Android Java, Kotlin, native, and process memory using repeatable flows, meminfo, heap dumps, retaining paths, heapprofd, and before-after evidence without confusing growth with proof.\n---\n\n# Android Memory Leaks\n\nGrowth is a lead. A leak is a retained object with a root path, or a repeatable\naccumulation under an equivalent flow.\n\n## Evidence ladder\n\n1. Directional snapshots via `dumpsys meminfo` and `/proc/<pid>/status`.\n2. Managed-heap dump when the process is debuggable and the suspect lives in\n   Java/Kotlin heap.\n3. Class counts, retained size, fields, and GC roots (Studio Profiler,\n   LeakCanary, Shark).\n4. Perfetto `heapprofd` for native allocation growth.\n5. Same flow again after the fix; same metrics and paths.\n\n## Capture\n\nPrefer the Autonom CLI — artifacts land in the session's `metrics/` dir and\nthe journal keeps the timeline:\n\n```bash\nautonom metrics snapshot --label baseline        # cheap directional point\nautonom metrics memory capture --label after-flow [--no-hprof]\nautonom metrics memory analyze                   # series math, leads only\nautonom metrics series --count 5 --interval 2    # snapshots + slope/leads\n```\n\nPass `--no-hprof` for release/profileable builds where dumpheap is\nunavailable. The standalone scripts remain for hosts without a session:\n\n```bash\n<skill-root>/scripts/capture_android_memory.sh \\\n  --serial <serial> --package <application-id> \\\n  --out-dir <artifact-dir> --label after-flow\npython3 <skill-root>/scripts/analyze_meminfo_series.py <artifact-dir> \\\n  --glob '*-meminfo.txt' --json\n```\n\n## Interpretation rules\n\n- One spike ≠ leak.\n- Prove managed leaks with a retaining path or repeatable accumulation.\n- Separate Dart/Flutter heap from Android managed and native memory.\n- Separate intentional process caches from feature-lifetime objects.\n- Fix the retaining edge; do not sprinkle forced GC or blanket clear calls.\n\n## Frequent retainers\n\nActivities, fragments, platform views, contexts, listeners, coroutines,\nadapters, bitmaps, singletons, plugin registrars, event channels, JNI handles,\nand caches without clear ownership.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}