◉CLAUDE LABJP
●2.1.301 — Adds the vim % motion, LaTeX math rendering in the VS Code panel, and a retry-watchdog limit for usage-limit waits (10/15)●2.1.299 — Conversations over 200K tokens left idle about 54 minutes get compacted; MCP allow rules now match only the server they name●SONNET 4.5 — Retires on the Claude API on 11/30, 45 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●FAST MODE — Opus 5.5 fast mode is out of research preview and no longer needs the beta header (10/15)●NEW — I Put a Ten-Line Promise File at the To…●2.1.301 — Adds the vim % motion, LaTeX math rendering in the VS Code panel, and a retry-watchdog limit for usage-limit waits (10/15)●2.1.299 — Conversations over 200K tokens left idle about 54 minutes get compacted; MCP allow rules now match only the server they name●SONNET 4.5 — Retires on the Claude API on 11/30, 45 days left. Migrate to Sonnet 5.5●WINDOWS — Reports say hooks break silently only on Japanese-locale Windows; check the character encoding first●FAST MODE — Opus 5.5 fast mode is out of research preview and no longer needs the beta header (10/15)●NEW — I Put a Ten-Line Promise File at the To…
Articles/Claude Code
⟐ Claude Code/2026-05-27Intermediate

How Claude Code Helped Me Kill a Glide 5.0.5 Java 8 Crash with One Line

After Beautiful HD Wallpapers v2.0.0 shipped, every Android 6.0.1 user crashed within 3 seconds. The fix turned out to be a single missing line in build.gradle.kts — and Claude Code is what got me there.

android9glidedesugarclaude-code132debugging8

✦ Premium Article

Seven days after shipping Beautiful HD Wallpapers v2.0.0, Firebase Crashlytics lit up a red issue tagged "Early Crash." The cause was NoClassDefFoundError: java.util.function.Supplier, and once I filtered by OS version, every affected device was Android 6.0.1 (API 23). Twelve events in seven days, four distinct users — but those four users were crashing 100% of the time, within three seconds of cold start.

Beautiful HD Wallpapers has accumulated roughly 50 million downloads across the years I've run it as an indie developer. API 23 is the slow tail you keep alive out of stubbornness rather than ROI, but watching a fresh release wipe out an entire OS bucket was not acceptable. Here's the path I walked with Claude Code — from Crashlytics issue to a single-line fix — in case you're staring at the same stack trace.

What the crash actually was — a Java 8 API missing on API 23

The stack trace I first looked at was three lines long:

Fatal Exception: java.lang.NoClassDefFoundError:
  Failed resolution of: Ljava/util/function/Supplier;
  at com.bumptech.glide.GlideBuilder.<init>(GlideBuilder.java:64)

java.util.function.Supplier is a Java 8 functional interface. Android only ships those in the runtime starting at API 24 (Nougat). API 23 is late Marshmallow, and that's where Glide 5.x began reaching for something the platform doesn't expose.

Glide's documentation says minSdk = 21, but the moment they started touching Java 8 functional types directly happened around the 5.x line. Combined with bumping Android Gradle Plugin to 9.x, the static linkage through Supplier became real instead of hypothetical.

What rescues you here is Core Library Desugaring — R8's mechanism for back-porting newer Java APIs to older Android runtimes. I had declared the dependency. I had not turned on the flag.

Why declaring the dependency was not enough

Adding coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") to dependencies is one half of the contract. R8 will not actually invoke desugaring until you flip isCoreLibraryDesugaringEnabled = true inside compileOptions. AGP keeps these decoupled on purpose: declaring the artifact and asking the toolchain to use it are different statements.

Up through v2.0.0 my project lived on Glide 4.x, which did not lean on Java 8 APIs in the surface area I was hitting. The exact version bump that exposed it was AGP 8.11.1 → 9.0.0 and Glide 4.16.0 → 5.0.5, landed in the same release. Twelve years of indie Android work have taught me that this is the canonical shape of "silent breakage on a major library bump."

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦Reproduce the exact path that recovered Crash-free users from 99.3% to 99.78% on Beautiful HD Wallpapers v2.1.0, with all Android 6.0.1 startup crashes (12 events / 4 users in 7 days) eliminated by a single line
✦Understand why declaring desugar_jdk_libs in dependencies is not enough — and what the compileOptions flag actually tells R8 to do under AGP 9.x
✦Apply the 4-step Claude Code workflow (Crashlytics issue → hypothesis triplet → minimal patch → CI guard) to your own Android project before the next major library bump
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

⟐ Claude Code2026-05-27
11 Days in Crashlytics: A Claude Code Debug Loop Across Two Android Wallpaper Apps
After shipping Beautiful Wallpapers v2.0.0 and Ukiyo-e Wallpapers v1.7.0 in early May, Crashlytics and Play Console threw more than 30 new issues at me in 11 days. This is the operations log of how I drove the fix list down to v2.1.1 / v1.8.1 using Claude Code as a triage partner.
⟐ Claude Code2026-06-12
Untangling Android Back-Button Ad Gates: A Parallel, Priority-Ordered Redesign with Claude Code
Nested back-button ad gates fired at the wrong moments. The parallel, priority-ordered redesign we shipped in v2.1.0, with Claude Code, Kotlin, and tests.
⟐ Claude Code2026-04-24
Debugging Claude Code Hooks in Production — Where to Start When Logs Are Missing
Your Claude Code hooks work locally but go silent in production. Here is the three-layer observability pattern I use on real projects, plus a 60-second minimal reproduction recipe for isolating failures.