- Home
- Skills
- Mobile Development
- R8 Crash Decoder: Obfuscated Stack Traces to Real Lines
Works with the AI Agents you already use
R8 Crash Decoder: Obfuscated Stack Traces to Real Lines
The release is live and the crash report says `a.b.c.d(SourceFile:4)`.
$6.99
R8 Crash Decoder: Obfuscated Stack Traces to Real Lines
Example session with this skill installed
Users on the new release are crashing and every trace reads like a.b.c.d(SourceFile:4). Three traces and the mapping.txt from that build are in fixtures/. What actually crashed, and which one do I fix first?
- Read your context and instructions
- Compiled the r8 crash decoder
Mapping: R8 8.5.35, 8 classes. All three traces decoded with exit code 0. The logcat trace carries a map id and it matches the mapping header.
3 traces in 2 clusters
| # | Count | Share | Exception | Top app frames, innermost first |
|---|---|---|---|---|
| 1 | 2 | 66.7% | java.lang.NumberFormatException | CheckoutViewModel.applyCoupon < CheckoutViewModel.onApplyClicked < MainActivity.lambda$onCreate$0 |
| 2 | 1 | 33.3% | com.example.shop.data.CartException | CartRepository.load < CartRepository.save < CartRepository.save |
Cluster 1, decoded (framework frames below trimmed)
java.lang.NumberFormatException: For input string: "SAVE10"
at java.lang.Integer.parseInt(Integer.java:615)
at java.lang.Integer.parseInt(Integer.java:650)
at com.example.shop.checkout.CheckoutViewModel.applyCoupon(CheckoutViewModel.kt:88) <== first app frame
at com.example.shop.checkout.CheckoutViewModel.onApplyClicked(CheckoutViewModel.kt:61) [inlined-caller]
at com.example.shop.MainActivity.lambda$onCreate$0(MainActivity.kt:31)
at com.example.shop.MainActivity$$ExternalSyntheticLambda0.onClick(R8$$SyntheticClass) [inlined-caller] [synthesized]
The obfuscated trace had two frames here, a.b.c.d(SourceFile:4) and a.b.b.onClick. Inlining expanded them to four app lines: applyCoupon (88), its call site (61), the click lambda and the compiler-made lambda class.
Next: fix cluster 1 first. I open CheckoutViewModel.kt at line 88 and read applyCoupon before naming a cause. The traces show a coupon code ("SAVE10", "FREESHIP") reaching Integer.parseInt. In cluster 2 one save frame lost its line number and fits two overloads, so I report both candidates. Not verified: no release build was run.
Connects securely to your tools. The creator never sees your data.
About this skill
The release is live and the crash report says a.b.c.d(SourceFile:4). The mapping file is somewhere, the SDK's retrace tool wants Java and the command-line tools, and an agent that can't read the trace guesses at the cause. This skill gives your agent one Python script that reads mapping.txt and turns the trace back into source locations.
What your agent does
- Decodes every frame to its original class, method, file and line, from a plain or gzipped mapping. Logcat and Play Console copies parse as they are.
- Expands inlined frames, so one obfuscated frame becomes the method that threw plus its call site.
- Lists every candidate when several methods share an obfuscated name and the line number is missing. It doesn't pick one for you.
- Checks the mapping against the trace, by map id when the trace carries one and by a heuristic frame count when it doesn't. A wrong mapping prints
MISMATCH, exits with code 1, and the agent stops before reading wrong names. - Ranks many crashes by root exception and top three app frames, so the largest group gets fixed first. Overloads of one method that the line numbers tell apart get separate clusters.
- Audits lookups by name for release-only failures such as
ClassNotFoundExceptionor null JSON fields, and proposes one narrow keep rule.
Built-in guard rails
- The agent opens the source at the first app frame before it states a cause.
- It won't add
-dontobfuscateor a package-wide keep to fix one crash. - A keep rule stays "not verified" until a release build is made and the new mapping checked.
- The trace and the mapping stay on your machine. The script has no network code.
What's inside
SKILL.md: eight-step workflow, marker table, hard rules, limits.scripts/r8_retrace.py: one standard-library script with four commands (retrace,cluster,keep-audit,lookup) and text or JSON output.- 5 reference files: mapping format, finding the right mapping, reading decoded traces, keep rules by symptom, trace sources.
- 11 fixture files: a sample mapping, three crashes, a wrong mapping and a small source tree.
- 169 unit tests in 4 test files.
The script is an independent reader of the mapping text format and doesn't claim to match the SDK retrace tool's output. Outlined code is flagged, not expanded.
Find more skills like this on the Claude Skills Marketplace, the Codex Skills Marketplace and the Gemini Skills Marketplace, or browse Claude Skills for Mobile Development.
Independent reader of the text mapping format, not the SDK retrace tool. Outlined code is flagged, not expanded. Native (NDK) backtraces aren't decoded. Without a map id in the trace the mapping check is a heuristic. keep-audit is a text scan and can't see rules shipped inside libraries.
How to use
- 1
Connect your agent to the Agensi MCP
Copy the prompt and paste it into Claude, ChatGPT, Cursor or any agent that supports MCP. It sets up the connection for you. Manual setup
- 2
Sign in to Agensi
Your agent shows a sign-in link. Sign in and click Allow.
- 3
Ask for what you need
Your agent loads this skill and uses it on your task. It always asks before buying a skill.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill goes through the trust checks below.
Security scanned
Checked by our 8-point scan before listing
Fresh listing
Recently published to Agensi
Money-back guarantee
Doesn't do what its page promises? You get your money back.
Trust & safety
Security scan
Security scan passed today
- Software
Python 3 (3 point 8 or later)R8 mapping file from the crashing buildThe stack trace as text
- Optional
- The app source codeversionName and versionCode of the buildA release build to verify keep rules