SUBSCRIBE NOW
avatar
I always learn something just by skimming it that makes me want to bookmark the issue now and dig deeper later
SUBSCRIBE NOW
avatar
Keep up the good work with the newsletter πŸ’ͺ I really enjoy it
SUBSCRIBE NOW
avatar
Dispatch is a must read for Android devs today and my go-to for keeping up with all things Jetpack Compose
SUBSCRIBE NOW
avatar
Dispatch has been my go-to resource as it's packed with useful information while being fun at the same time
SUBSCRIBE NOW
avatar
The content is light, fun, and still useful. I especially appreciate the small tips that are in each issue
SUBSCRIBE NOW
avatar
I truly love this newsletter ❀️‍πŸ”₯ Spot on content and I know there's a lot of effort that goes behind it
SUBSCRIBE NOW
avatar
Thanks for taking the time and energy to do it so well
JetpackCompose.app's Newsletter
avatar
I always learn something just by skimming it that makes me want to bookmark the issue now and dig deeper later
JetpackCompose.app's Newsletter
avatar
Keep up the good work with the newsletter πŸ’ͺ I really enjoy it
JetpackCompose.app's Newsletter
avatar
Dispatch is a must read for Android devs today and my go-to for keeping up with all things Jetpack Compose
JetpackCompose.app's Newsletter
avatar
Dispatch has been my go-to resource as it's packed with useful information while being fun at the same time
JetpackCompose.app's Newsletter
avatar
The content is light, fun, and still useful. I especially appreciate the small tips that are in each issue
JetpackCompose.app's Newsletter
avatar
I truly love this newsletter ❀️‍πŸ”₯ Spot on content and I know there's a lot of effort that goes behind it
JetpackCompose.app's Newsletter
avatar
Thanks for taking the time and energy to do it so well

Dispatch Issue #12

In today's issue, we talk about πŸ¦β€πŸ”₯ Swift on Android, learn some mind-boggling facts about naming variables, discuss my recent chat with Kaushik Gopal, and explore how to provide the entire codebase to an LLM.
Vinay Gaba Profile Image
Vinay Gaba on March 12, 2025
Hero Image

Hello Friends. This is JetpackCompose.app's Dispatch, the newsletter that boils down everything that's happening in #AndroidDev, so you can sound smart to your friends!

This is Issue # 12 so let's get right to it πŸš€

πŸ•΅πŸ»β€β™‚οΈ Insider Insight

Want to give your LLM of choice context about your entire codebase without tediously copying files one by one? Here's a brilliant hack: replace github with gitingest in any GitHub repository URL!

For example:

https://github.com/airbnb/Showkase

becomes:

https://gitingest.com/airbnb/Showkase

Gitingest gives you the entire repo as a single string that you can paste into ChatGPT, Claude, or your LLM of choice. It's perfect for when you need to ask questions about a codebase or get help understanding how different components interact.

Gitingest gives you a single string that represents you entire github repository. It has a role to play until entire codebase awareness is available natively in Gemini for Android Studio.

Gitingest demo Gitingest gives you a single string that represents you entire github repository. It has a role to play until entire codebase awareness is available natively in Gemini for Android Studio.

This is incredibly useful when you need to:

  1. Get a high-level understanding of an unfamiliar codebase
  2. Find specific implementation details without cloning and searching locally
  3. Ask for explanations of complex code patterns across the repository
  4. Generate documentation and README for poorly documented projects
  5. Identify potential issues or improvement opportunities that span across a large number of files

Of course, this comes with the obvious caveat that you should only do this with code you're comfortable sharing with third-party AI services. Your company's proprietary codebase probably shouldn't be fed into public LLMs, but for open source projects or personal code, this is a massive time-saver!

The reason this is so relevant for the Android ecosystem is because the current state of Android Studio AI tooling doesn't make it easy to inject the entire codebase and that's what separates it other IDEs like Cursor that have all the hype these days.

And while, I absolutely expect this gap to go away over the next few months, a solution like gitingest does have a really high utility based on how things stand today for the Android development ecosystem.

I'll use this opportunity to also give a shoutout to a couple guys who are trying to build the Cursor for Android - Firebender . They've been hard at work and I admire their hustle so want to give them some credit because their agent does have access to the entire codebase (among other things). Jetbrains also have an agent that they offer called Junie but it's currently behind a waitlist.

🍾 Pop Quiz (and also WTFacts)

Which code snippet out of the two below is more performant?

Option A

class Element {
    @JvmField var start = 0
    @JvmField var end = 0
    // Imagine there are 20 other Int properties here
    ....
    ....
}

Option B

class Element {
    @JvmField var begin = 0
    @JvmField var end = 0
    // Imagine there are 20 other Int properties here
}

This is how the Element class ends up being used in practice for the purpose of this sample.

// Pre-populated list of Element
val elements = listOf<Element>(...)
for (element in elements) {
    // or element.begin if you choose Option B
    val start = element.start
    val end = element.end
    sum += end - start
}

Find the answer in a section below ⬇️

πŸ“£ Personal Update

In the previous issue of this newsletter, I reached out to a few Android experts and asked them all an important question -

Where do you see Android Development in three years, and how do you think developers should prepare for that future?

It'll be an understatement to say that the lineup was stacked. The crew of experts shared a bunch of fun hot-takes, insights, wishes and predictions. It's a particularly interesting time for the Android ecosystem so I was really curious to hear all the diverse perspectives.

The reason this is relevant is because it was the topic we anchored on as part of the latest episode of the Fragmented Podcast. I was honored to hang out with my friend Kaushik to discuss the future of Android and just shoot the breeze. We covered a lot of ground on the episode so I encourage you to give it a listen.

There was one question in particular that Kaushik asked which I thought was worth sharing here-

Are there some opinions that you think were not covered by anyone, that you'd want to put out there?

Here are some of my raw notes that I put together and published to answer this question. I figured I'll just share them here as well since I think they might be interesting to some of my readers. I highly recommend giving the episode a listen to get the full context.

VinayGaba's notes about the future of Android

πŸ˜† Dev Delight

Dishpit
Dishpit
@Dishpit
Twitter logo
in case you didn't know, this is how you're actually supposed to do software versioning
Hero Image
t3.gg
t3.gg
@theo
Twitter logo
This is one of the wildest git diffs I've ever seen
Hero Image

πŸ€” Interesting tid-bits

"Swift on Android" is gaining momentum

I recently learnt about "Swift on Android" which is an effort to enable running Swift code on Android devices 🀯 Apparently there's a community working-group forming to unify fragmented efforts. They're focusing on improving features such as concurrency support, library compatibility, and debugging experiences. While I'm personally very skeptical about adding yet another cross-platform solution to our already fragmented ecosystem (Flutter, React Native, KMP, etc.), it's interesting to see Swift expanding beyond Apple's walled garden. Sometimes I wonder how much progress we could've made if instead of creating yet another framework, we decided to just grab a pint of beer, figure out the one framework that we mostly believe in and spent all our collective energy in improving that solution. Oh well, I suspect this will remain a pipe dream of mine πŸ€”

Compose Multiplatform Previews confusion might finally be getting addressed

Currently, there are three different Preview annotations that one needs to deal with in Compose Multiplatform land, which is about as clear as a Gradle error message 🀭

  1. androidx.compose.ui.tooling.preview.Preview for androidMain
  2. androidx.compose.desktop.ui.tooling.preview.Preview for desktopMain
  3. org.jetbrains.compose.ui.tooling.preview.Preview for commonMain

The good news is that there's movement on supporting the commonMain Preview annotation in both IDEA and Android Studio. This matters because my tiny brain can't deal with cognitive load that doesn't need to exist. This consolidation was shipped as part of the IntelliJ IDEA 2025.1 EAP 2 build so go install it and go waste that brain energy on something else πŸ˜‚

True "Hot Reload" for Compose has reached alpha status

In a previous edition of the newsletter, I mentioned this project that Jetbrains was working on. It's exciting to see it gaining traction and funding. While the implementation is still quite manual (as expected for an alpha), this could be a game-changer for Compose development workflows. The current approach of using @Preview in Jetpack Compose is helpful but doesn't match the immediacy of true hot reload. Check out the project at github.com/JetBrains/compose-hot-reload and consider giving feedback as this evolves.

πŸ™ŒπŸ» Subscriber Wins

I want this newsletter to be a space where we highlight and celebrate your successes. Today's shout-out goes to Sebastian, who recently had his talk accepted for the Android Makers conference in Paris. Huge congratulations πŸ‘πŸ»

Sebastian will be speaking at Android Makers conference

If you have a win you'd like to share (or know of somebody else who should be highlighted here), please please please let me know πŸ™πŸ» β€” I'd love to feature more stories and cheer on the achievements of the Android community. I feel like we don't do enough of this and want to use this space to move the needle on this front. You can simply email to get in touch and share.

🍾 Pop Quiz: Solution

The answer to that question is: Option B

Naming your variables begin and end (as opposed to start and end) results in more performant code, based on how it was being used in the example 🀯

// Option B
class Element {
    @JvmField var begin = 0
    @JvmField var end = 0
    // Imagine there are 20 other Int properties here
}

// Usage
// Pre-populated list of Element
val elements = listOf<Element>(...)
for (element in elements) {
    val begin = element.begin
    val end = element.end
    sum += end - begin
}

I know this sounds bonkers, as it rightly should. This was the subject of a blog post that Romain Guy wrote about to describe this surprising behavior.

The key insight in that blogpost was that ART (Android Runtime) organizes fields in memory based on:

  1. Type groups (larger types like Long/Double come first)
  2. Alphabetical order within each type group

Since all the properties in our example were Int properties, ART chooses to arrange all the variables in alphabetical order. When fields are accessed together but end up far apart in memory (due to their ordering), you get cache misses that significantly impact performance.

Hence when the variables that were closer in alphabetic order (begin/end vs start/end) were accessed together, it resulted in more performant code (40% faster as per Romain's code profiling for that example).

Indeed, naming things is hard.

πŸ¦„ How you can help?

πŸ‘‰πŸ» If you enjoyed this newsletter, I'd greatly appreciate it if you could share it with your peers and friends. Your support helps me reach more Android developers and grow our community. Writing this newsletter takes time and effort, and it truly makes my day when I see it shared within your network. Consider tweeting about it or sharing it in your team's Slack workspace. Thank you!

πŸ‘‰πŸ» If you find this newsletter or any of my other free websites or open source contributions useful, consider supporting my work πŸ™πŸ»

πŸ‘‰πŸ» Get my Maker OS Notion Template that I use to run my life on Notion. If you are into productivity, you will appreciate it! Here's a quick preview of what it looks likeβ€”

On that note, here's hoping that your bugs are minor and your compilations are error free.

Welcome to the VIP club
To read the rest of the post, subscribe and never miss an issue!
Already a subscriber? Use the same account to login again.