The latest issue of Dispatch goes out in ~5 mins. This is a really important topic in the AI first world we live in and is based on my observation helping thousands of engineers at companies like Airbnb and Databricks be AI first.
www.jetpackcompose.app/newsletter
#AndroidDev #AI
Posts by JetpackCompose.app
The latest issue of Dispatch just went out π
We cover some spicy topics and you don't want to miss the chance to learn a few new things in < 5mins.
#AndroidDev
Wrote about something I like to call the "40/30/30 rule" for AI dev tools.
I divide the choice of tools into 3 buckets think it's completely normal to use all the 3 types... in the same day!!
More here - www.jetpackcompose.app/newsletter/d...
#AndroidDev #AI
Want your Jetpack Compose library to be featured on our site?
Well we now have a dedicated page where you can submit your libraries and reach thousands of Android developers π
#AndroidDev
The setup mirrors .gitignore syntax:
Gemini won't see those files, but still understands the rest of your codebase.
Fine-grained control. Best of both worlds.
For more tips like these β www.jetpackcompose.app/newsletter
Want Gemini in Android Studio but worried about sharing sensitive IP?
Use .aiexclude filesβit's like .gitignore but for AI.
Your private code stays private while you still get contextually rich AI suggestions.
#AndroidDev
Credit to Adam Powell from the Compose core team for this deep knowledge.
More Compose internals in our newsletter β Dispatch
www.jetpackcompose.app/newsletter
When does onAbandoned happen? When the effect was never successfully "remembered" - rare, but possible.
If correctness is critical, you need to handle both cases explicitly:
π¨ ANSWER TIME π¨
The answer: onDispose is NOT guaranteed to be called in all cases!
DisposableEffect implements RememberObserver. The dispose is called in onForgotten but NOT in onAbandoned.
Hint: Think about what happens if composition is "abandoned" before being fully remembered...
π SPOT THE BUG π
Is the onDispose callback GUARANTEED to be called?
#AndroidDev
Part of Compose 1.7+. If you're still using Canvas hacks for bitmap capture, it's time to upgrade.
More Android gems in Dispatch:
www.jetpackcompose.app/newsletter
That's it. No View references. No hacky workarounds.
Use cases:
β
Screenshot sharing
β
Bug report attachments
β
Social media content
β
Image processing pipelines
β
Custom export features
When you need the bitmap (for sharing, bug reports, etc.):
The old way involved "View.drawToBitmap()", Canvas shenanigans, and prayers.
The new way? Just a few lines:
Converting a Composable to a Bitmap used to require black magic and a sacrifice to the Android gods.
Not anymore. rememberGraphicsLayer() makes it ridiculously simple.
Thread on capturing Composables as images π§΅
#AndroidDev
This is purely to get the community together so come hang π€ The more people that sign up, the higher the odds that we'll be able to assemble a really group so please please help us spread the word out. It's our first time doing it so sharing this will go a long way.
Please help us reach more people
Some topics we'll discuss:
- How AI is changing engineering
- Lessons from Airbnb about why Design Systems fail
- How to drive adoption of new tech in a company
- The false promise of Server Driven UI and how most implementations are essentially a recreation of CSS like scaffolding
and more
We are excited to announce our very first meetup π₯³
π Bengaluru (exact location TBD)
ποΈ Jan 4th, 2026
β° 5β7 PM
We are bringing together some of the smartest Android engineers in the city for a relaxed evening to hang out, grab a drink, and have fun conversations.
luma.com/vslr0fgc
#AndroidDev
This is the kind of problem-solving that makes the Android community great.
To discover more golden nuggets like these, subscribe to our newsletter π
www.jetpackcompose.app/newsletter
Despite the tiny footprint, it has:
Loading from URL, local storage, assets
RAM and disk caching
Page prefetching
Screenshot protection (FLAG_SECURE)
Jetpack Compose integration
88KB. Full features. Mind blown.
His strategy:
β
Zero native dependencies
β
Minimal HTTP (standard HttpsURLConnection, no OkHttp)
β
Lean UI (RecyclerView)
β
Custom PinchZoomRecyclerView
β
R8/ProGuard friendly (no reflection)
β
Zero bundled assets
Most Android PDF libraries weigh 10-16MB because they bundle native C/C++ code.
Rajat Mittal built one that's 88 KILOBYTES. π€―
How? By ditching native deps and using only Android's built-in PdfRenderer.
Thread on lightweight library design π§΅
#AndroidDev
This is the difference between "code that works" and "code that's fast."
Most of us don't need to optimize this deep. But when you do, knowing how to profile and inline matters.
Key lesson: In hot code paths, the compiler can't always optimize for you.
Sometimes you need to get your hands dirty and inline manually.
Tools like Kotlin Explorer help you peek at generated code and find opportunities.
Romain rewrote it as one inline helper (resetToPivotedTransform) and slashed the cost to:
168 instructions, 1 branch
Just 15% of the original work. 6Γ faster
The problems:
π Two throw-away matrices
π A full reset() you mostly overwrite
π Generic 4Γ4 multiplies for data you don't need
Result: 1,062 instructions, 39 branches
The "readable" way:
Readable? Yes. Efficient? Hell no.
@romainguy.dev shared a Compose performance optimization that cut 1,062 ARM64 instructions down to 168.
That's 85% reduction in the number of instructions.
Thread on why manual function inlining matters π§΅
#AndroidDev