{"id":"8fddfeca-ad05-45eb-8d9e-d40b43c5cb8a","shortId":"35edHZ","kind":"skill","title":"android-performance-observability","tagline":"Measure startup, rendering, memory, jank, vitals, logs, and crash signals for Android apps with actionable traces.","description":"# Android Performance Observability\n\n## When To Use\n- Use this skill when the request is about: android performance profiling, baseline profile or macrobenchmark, app startup issue android.\n- Primary outcome: Measure startup, rendering, memory, jank, vitals, logs, and crash signals for Android apps with actionable traces.\n- Read `references/patterns.md` when you need the measurement ladder for startup, jank, traces, and production signals.\n- Read `references/scenarios.md` for repeatable profiling and trace-oriented entry points.\n- Handoff skills when the scope expands:\n- `android-compose-performance`\n- `android-ci-cd-release-playstore`\n\n## Workflow\n1. Classify the symptom before choosing tools: cold start, warm start, frame/jank, scrolling, memory, ANR, crash, battery, or production vitals drift.\n2. Measure on release-like builds and physical devices whenever possible; avoid debugging from debug-only traces or profile-unfriendly builds.\n3. Pick the smallest tool that answers the question: Macrobenchmark for startup/scroll numbers, Baseline Profiles for ahead-of-time optimization, Perfetto/System Tracing for deep traces, JankStats or FrameMetrics for frame quality, and Play Vitals for field evidence.\n4. Change one thing at a time, then compare before and after traces or benchmark outputs instead of stacking multiple optimizations blindly.\n5. Hand off UI-specific rendering changes or release rollouts only after the measurement surface is stable and the bottleneck is evidenced.\n\n## Guardrails\n- Treat benchmarks, traces, and vitals as different evidence sources with different noise profiles; do not mix them casually.\n- Prefer reproducible release-build measurements over debug-build intuition.\n- Tie optimizations back to user-facing metrics such as startup time, frame pacing, ANRs, or battery impact.\n- Keep the profiling setup stable enough that regressions are attributable to code changes instead of device or environment churn.\n\n## Anti-Patterns\n- Chasing micro-optimizations before identifying whether the problem is startup, rendering, I/O, or field reliability.\n- Reading one noisy trace and presenting the result as settled fact.\n- Measuring debug builds and assuming the same behavior in production.\n- Adding Baseline Profiles or macrobenchmarks without checking whether the target path is stable enough to compare.\n\n## Review Focus\n- Startup: cold and warm launch, expensive initialization, and Baseline Profile coverage.\n- Rendering: jank, skipped frames, Compose or View invalidation churn, and long main-thread work.\n- Memory and reliability: allocations, leaks, ANRs, crashes, and Play Vitals trends.\n- Evidence quality: repeatable commands, release-like variants, and documented before/after comparisons.\n\n## Examples\n### Happy path\n- Scenario: Audit the repo for profiling surfaces and benchmark-related hooks before proposing a measurement plan.\n- Command: `rg -n \"baseline|macrobenchmark|profileable|JankStats|Trace|Perfetto\" .`\n\n### Edge case\n- Scenario: Keep startup and rendering investigations grounded in repeatable release-like builds.\n- Command: `cd examples/orbittasks-compose && ./gradlew :app:assembleDebug`\n\n### Failure recovery\n- Scenario: Keep observability requests distinct from Compose-only tuning or release automation.\n- Command: `python3 scripts/eval_triggers.py --skill android-performance-observability`\n\n## Done Checklist\n- The bottleneck is classified and tied to an evidence source that can be re-run.\n- The chosen tools match the symptom instead of duplicating noisy measurements.\n- Before/after comparisons are explicit for any recommended optimization.\n- UI-only or release-only work is separated from measurement and tracing.\n\n## Official References\n- [https://developer.android.com/studio/profile/overview](https://developer.android.com/studio/profile/overview)\n- [https://developer.android.com/topic/performance/vitals](https://developer.android.com/topic/performance/vitals)\n- [https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview](https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview)\n- [https://developer.android.com/topic/performance/benchmarking/macrobenchmark-metrics](https://developer.android.com/topic/performance/benchmarking/macrobenchmark-metrics)\n- [https://developer.android.com/topic/performance/baselineprofiles/overview](https://developer.android.com/topic/performance/baselineprofiles/overview)\n- [https://developer.android.com/topic/performance/tracing](https://developer.android.com/topic/performance/tracing)\n- [https://developer.android.com/topic/performance/rendering/jankstats](https://developer.android.com/topic/performance/rendering/jankstats)","tags":["android","performance","observability","agent","skills","krutikjain","agent-skills","android-development","android-skills","androidx","claude-code","codex"],"capabilities":["skill","source-krutikjain","skill-android-performance-observability","topic-agent-skills","topic-android","topic-android-development","topic-android-skills","topic-androidx","topic-claude-code","topic-codex","topic-cursor","topic-jetpack-compose","topic-kotlin","topic-skills"],"categories":["android-agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/krutikJain/android-agent-skills/android-performance-observability","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add krutikJain/android-agent-skills","source_repo":"https://github.com/krutikJain/android-agent-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (4,708 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:28.477Z","embedding":null,"createdAt":"2026-05-18T13:20:51.148Z","updatedAt":"2026-05-18T19:13:28.477Z","lastSeenAt":"2026-05-18T19:13:28.477Z","tsv":"'/gradlew':456 '/studio/profile/overview](https://developer.android.com/studio/profile/overview)':537 '/topic/performance/baselineprofiles/overview](https://developer.android.com/topic/performance/baselineprofiles/overview)':549 '/topic/performance/benchmarking/macrobenchmark-metrics](https://developer.android.com/topic/performance/benchmarking/macrobenchmark-metrics)':546 '/topic/performance/benchmarking/macrobenchmark-overview](https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview)':543 '/topic/performance/rendering/jankstats](https://developer.android.com/topic/performance/rendering/jankstats)':555 '/topic/performance/tracing](https://developer.android.com/topic/performance/tracing)':552 '/topic/performance/vitals](https://developer.android.com/topic/performance/vitals)':540 '1':107 '2':128 '3':152 '4':190 '5':212 'action':19,62 'ad':342 'ahead':169 'ahead-of-tim':168 'alloc':389 'android':2,16,21,35,45,59,97,101,479 'android-ci-cd-release-playstor':100 'android-compose-perform':96 'android-performance-observ':1,478 'anr':121,279,391 'answer':158 'anti':303 'anti-pattern':302 'app':17,42,60,457 'assembledebug':458 'assum':336 'attribut':292 'audit':413 'autom':473 'avoid':140 'back':267 'baselin':38,165,343,368,432 'batteri':123,281 'before/after':407,511 'behavior':339 'benchmark':204,237,421 'benchmark-rel':420 'blind':211 'bottleneck':232,485 'build':134,151,258,263,334,452 'case':439 'casual':253 'cd':103,454 'chang':191,219,295 'chase':305 'check':348 'checklist':483 'choos':112 'chosen':501 'churn':301,379 'ci':102 'classifi':108,487 'code':294 'cold':114,361 'command':400,429,453,474 'compar':198,357 'comparison':408,512 'compos':98,375,468 'compose-on':467 'coverag':370 'crash':13,56,122,392 'debug':141,144,262,333 'debug-build':261 'debug-on':143 'deep':176 'developer.android.com':536,539,542,545,548,551,554 'developer.android.com/studio/profile/overview](https://developer.android.com/studio/profile/overview)':535 'developer.android.com/topic/performance/baselineprofiles/overview](https://developer.android.com/topic/performance/baselineprofiles/overview)':547 'developer.android.com/topic/performance/benchmarking/macrobenchmark-metrics](https://developer.android.com/topic/performance/benchmarking/macrobenchmark-metrics)':544 'developer.android.com/topic/performance/benchmarking/macrobenchmark-overview](https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview)':541 'developer.android.com/topic/performance/rendering/jankstats](https://developer.android.com/topic/performance/rendering/jankstats)':553 'developer.android.com/topic/performance/tracing](https://developer.android.com/topic/performance/tracing)':550 'developer.android.com/topic/performance/vitals](https://developer.android.com/topic/performance/vitals)':538 'devic':137,298 'differ':242,246 'distinct':465 'document':406 'done':482 'drift':127 'duplic':508 'edg':438 'enough':288,355 'entri':88 'environ':300 'evid':189,243,397,492 'evidenc':234 'exampl':409 'examples/orbittasks-compose':455 'expand':95 'expens':365 'explicit':514 'face':271 'fact':331 'failur':459 'field':188,319 'focus':359 'frame':182,277,374 'frame/jank':118 'framemetr':180 'ground':446 'guardrail':235 'hand':213 'handoff':90 'happi':410 'hook':423 'i/o':317 'identifi':310 'impact':282 'initi':366 'instead':206,296,506 'intuit':264 'invalid':378 'investig':445 'issu':44 'jank':9,52,74,372 'jankstat':178,435 'keep':283,441,462 'ladder':71 'launch':364 'leak':390 'like':133,403,451 'log':11,54 'long':381 'macrobenchmark':41,161,346,433 'main':383 'main-thread':382 'match':503 'measur':5,48,70,129,226,259,332,427,510,530 'memori':8,51,120,386 'metric':272 'micro':307 'micro-optim':306 'mix':251 'multipl':209 'n':431 'need':68 'nois':247 'noisi':323,509 'number':164 'observ':4,23,463,481 'offici':533 'one':192,322 'optim':172,210,266,308,518 'orient':87 'outcom':47 'output':205 'pace':278 'path':352,411 'pattern':304 'perfetto':437 'perfetto/system':173 'perform':3,22,36,99,480 'physic':136 'pick':153 'plan':428 'play':185,394 'playstor':105 'point':89 'possibl':139 'prefer':254 'present':326 'primari':46 'problem':313 'product':77,125,341 'profil':37,39,83,149,166,248,285,344,369,417,434 'profile-unfriend':148 'propos':425 'python3':475 'qualiti':183,398 'question':160 're':498 're-run':497 'read':64,79,321 'recommend':517 'recoveri':460 'refer':534 'references/patterns.md':65 'references/scenarios.md':80 'regress':290 'relat':422 'releas':104,132,221,257,402,450,472,524 'release-build':256 'release-lik':131,401,449 'release-on':523 'reliabl':320,388 'render':7,50,218,316,371,444 'repeat':82,399,448 'repo':415 'reproduc':255 'request':32,464 'result':328 'review':358 'rg':430 'rollout':222 'run':499 'scenario':412,440,461 'scope':94 'scripts/eval_triggers.py':476 'scroll':119 'separ':528 'settl':330 'setup':286 'signal':14,57,78 'skill':29,91,477 'skill-android-performance-observability' 'skip':373 'smallest':155 'sourc':244,493 'source-krutikjain' 'specif':217 'stabl':229,287,354 'stack':208 'start':115,117 'startup':6,43,49,73,275,315,360,442 'startup/scroll':163 'surfac':227,418 'symptom':110,505 'target':351 'thing':193 'thread':384 'tie':265,489 'time':171,196,276 'tool':113,156,502 'topic-agent-skills' 'topic-android' 'topic-android-development' 'topic-android-skills' 'topic-androidx' 'topic-claude-code' 'topic-codex' 'topic-cursor' 'topic-jetpack-compose' 'topic-kotlin' 'topic-skills' 'trace':20,63,75,86,146,174,177,202,238,324,436,532 'trace-ori':85 'treat':236 'trend':396 'tune':470 'ui':216,520 'ui-on':519 'ui-specif':215 'unfriend':150 'use':26,27 'user':270 'user-fac':269 'variant':404 'view':377 'vital':10,53,126,186,240,395 'warm':116,363 'whenev':138 'whether':311,349 'without':347 'work':385,526 'workflow':106","prices":[{"id":"30b590ac-166f-41db-9c97-12b26c878de6","listingId":"8fddfeca-ad05-45eb-8d9e-d40b43c5cb8a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"krutikJain","category":"android-agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:20:51.148Z"}],"sources":[{"listingId":"8fddfeca-ad05-45eb-8d9e-d40b43c5cb8a","source":"github","sourceId":"krutikJain/android-agent-skills/android-performance-observability","sourceUrl":"https://github.com/krutikJain/android-agent-skills/tree/main/skills/android-performance-observability","isPrimary":false,"firstSeenAt":"2026-05-18T13:20:51.148Z","lastSeenAt":"2026-05-18T19:13:28.477Z"}],"details":{"listingId":"8fddfeca-ad05-45eb-8d9e-d40b43c5cb8a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"krutikJain","slug":"android-performance-observability","github":{"repo":"krutikJain/android-agent-skills","stars":8,"topics":["agent-skills","android","android-development","android-skills","androidx","claude-code","codex","cursor","jetpack-compose","kotlin","skills"],"license":"mit","html_url":"https://github.com/krutikJain/android-agent-skills","pushed_at":"2026-03-25T05:47:20Z","description":"Android skills repository for Kotlin, Compose, XML, testing, CI, release work, and legacy upgrades","skill_md_sha":"1ca1c0dec440e94e2ad15747634bfdd50d42bd8e","skill_md_path":"skills/android-performance-observability/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/krutikJain/android-agent-skills/tree/main/skills/android-performance-observability"},"layout":"multi","source":"github","category":"android-agent-skills","frontmatter":{"name":"android-performance-observability","description":"Measure startup, rendering, memory, jank, vitals, logs, and crash signals for Android apps with actionable traces."},"skills_sh_url":"https://skills.sh/krutikJain/android-agent-skills/android-performance-observability"},"updatedAt":"2026-05-18T19:13:28.477Z"}}