Works with the AI Agents you already use

    Claude CodeClaude CodeCursorCursorCodex CLICodex CLIDeepSeekDeepSeekMuseMuse+22 more

    R8 Crash Decoder: Obfuscated Stack Traces to Real Lines

    1

    The release is live and the crash report says `a.b.c.d(SourceFile:4)`.

    $6.99

    Secure checkout via Stripe

    Money-back guarantee

    Converts to your local currency at checkout

    Security scanned
    R8 Crash Decoder: Obfuscated Stack Traces to Real Lines

    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

    #CountShareExceptionTop app frames, innermost first
    1266.7%java.lang.NumberFormatExceptionCheckoutViewModel.applyCoupon < CheckoutViewModel.onApplyClicked < MainActivity.lambda$onCreate$0
    2133.3%com.example.shop.data.CartExceptionCartRepository.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 ClassNotFoundException or 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 -dontobfuscate or 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. 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. 2

      Sign in to Agensi

      Your agent shows a sign-in link. Sign in and click Allow.

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

    Permissions

    Terminal / Shell
    Read Files
    Listedtoday

    What's inside

    Frequently Asked Questions

    No. It's an independent Python reader of the mapping text format, and its output isn't claimed to be identical to retrace. Outlined code is flagged, not expanded.

    A map id in the trace is compared with the mapping header, and without one a frame count heuristic applies. Either prints MISMATCH and exits with code 1. The count can miss a mapping from a nearby build, so the agent still asks for the version code.

    No. You supply the trace as text. The references show how to copy a complete trace from logcat, a bug report and the Play Console.

    No. It's a text scan of Kotlin, Java and XML that doesn't read your keep rules or the rules shipped inside libraries. Treat each suggested rule as a proposal and check it against the decoded crash.

    New in Mobile Development