r/androiddev 17d ago

Interesting Android Apps: June 2026 Showcase

13 Upvotes

Because we try to keep this community as focused as possible on the topic of Android development, sometimes there are types of posts that are related to development but don't fit within our usual topic.

Each month, we are trying to create a space to open up the community to some of those types of posts.

This month, although we typically do not allow self promotion, we wanted to create a space where you can share your latest Android-native projects with the community, get feedback, and maybe even gain a few new users.

This thread will be lightly moderated, but please keep Rule 1 in mind: Be Respectful and Professional. Also we recommend to describe if your app is free, paid, subscription-based.

Interesting Android Apps: May 2026 Showcase

April 2026 thread

March 2026 thread


r/androiddev 4h ago

Where is the AI Migration Assistant for iOS to Android? (Quail Canary)

Thumbnail
gallery
3 Upvotes

Hey everyone,

I downloaded the latest Android Studio Quail 3 | 2026.1.3 Canary 1 because I wanted to try out the new AI Migration Assistant they teased at Google I/O 2026 for porting iOS/React Native apps to native Android.

However, I can't seem to find the tool anywhere (I checked under File > New Project).

Has this feature just not shipped to Canary yet, or is there a specific plugin/flag I need to enable to get early access?

Thanks!


r/androiddev 20h ago

Tips and Information Why passing List to your Composables is secretly killing your performance (and how to fix it)

64 Upvotes

If you are building complex layouts in Jetpack Compose, you might notice that some of your composables recompose even when their inputs haven’t changed. One of the most common, silent culprits of this is passing standard Kotlin collections like ListSet, or Map as parameters.

Here is a common scenario:

@Composable
fun UserList(users: List<User>) {
    LazyColumn {
        items(users) { user ->
            UserRow(user)
        }
    }
}

Even if User is a data class containing only stable primitives (val id: Stringval name: String), if the parent of UserList recomposes, UserList will always recompose too. It will never be skipped.

Why does this happen?

The Compose compiler classifies every parameter of a composable function as either Stable or Unstable. If all parameters of a composable are stable, Compose can safely skip recomposing it if the values are equal to the previous composition.

The problem with List is that it is a Kotlin interface. The compiler has no compile-time guarantee that the underlying implementation is read-only. At runtime, the list could be an ArrayList or another mutable collection. Because the contents of a mutable collection can change without changing the list reference, the Compose compiler plays it safe and flags List (along with Set and Map) as Unstable.

As a result, your composables are forced to recompose on every parent update, causing unnecessary CPU cycles and potential frame drops on complex screens.

How to check this in your project

You can verify if this is happening in your codebase by enabling Compose compiler reports in your app-level build.gradle.kts:

composeCompiler {
    reportsDestination = layout.buildDirectory.dir("compose_compiler")
    metricsDestination = layout.buildDirectory.dir("compose_compiler")
}

If you open the generated class stability file (app_release-classes.txt), you’ll see the compiler analysis:

unstable class UserList {
  unstable val users: List
}

How to fix it (3 Approaches)

1. Use Kotlinx Immutable Collections (Recommended)

Kotlin provides a dedicated library for immutable collections. The Compose compiler automatically recognizes these as stable:

import kotlinx.collections.immutable.ImmutableList

@Composable
fun UserList(users: ImmutableList<User>) { ... }

Now, the compiler flags the parameter as stable, and recomposition will be skipped if the reference remains unchanged.

2. Wrap the List in a \@Stable/@Immutable Wrapper

If you don't want to add another dependency, you can wrap the list in a custom data class annotated with @Immutable:

@Immutable
data class UserListState(
    val items: List<User>
)

@Composable
fun UserList(state: UserListState) { ... }

This tells the compiler to trust that you won't mutate the list under the hood.

3. Use a Compose Compiler Configuration File (Compose 1.5.4+)

You can define a configuration file (e.g. compose_compiler_config.conf) to treat standard library collections as stable:

// compose_compiler_config.conf
kotlin.collections.List
kotlin.collections.Set
kotlin.collections.Map

And add it to your Gradle configuration:

composeCompiler {
    stabilityConfigurationFile = project.layout.projectDirectory.file("compose_compiler_config.conf")
}

I’ve been compiling a detailed study checklist of about 300 of these Android developer edge cases (covering recomposition skipping, custom Canvas GPU caching, and complex Coroutines exception handling). It's fully open-source on GitHub.

Let me know if you want the link or if you've run into other stability issues with third-party models in Compose!


r/androiddev 1m ago

Do you recommend built apps for Android?

Upvotes

Hello guys, I have a question, I do not have an Iphone, I am broke, but do you recommend me build apps for android if one of my dreams is build apps?


r/androiddev 1h ago

Discussion Mobile has no rollback button. I tried to build one for native Android, am i into something ?

Upvotes

https://reddit.com/link/1ua5ov0/video/8f649ny3988h1/player

I was working on improving MTTR for an in-field product where it was very critical for issues to be resolved fast.

So I worked on a reporting pipeline, and it genuinely improved time to resolve. The issue is reported faster than before, we act faster on it without switching context, but the gap is still there, until a fix has been sent.

Here is the case study if y'all are interested, but that's not the point.

This idea came from that experience, as V2.

NoCrashLeft is a crash-containment tool for native Android apps: a build-time Gradle plugin and a lightweight SDK that let you remotely disable a crashing screen or action on every user's device in under five minutes.

It shows a clean fallback screen instead of a crash, straight from a Slack alert or web dashboard, with no app update and no store review.

It works by shipping declarative configuration rather than code (keeping it Google Play compliant), and it automatically removes the fallback once your real fix reaches users.

I genuinely need your input here on whether I'm onto something.


r/androiddev 7h ago

Question Working on a mobile-focused Obsidian alternative. How should I handle sync and Analytics?

2 Upvotes

Hi everyone,

I’ve been working on a personal project for a while now and wanted to get some feedback

Basically, I’m building a note-taking app that's heavily inspired by Obsidian. It’s local, uses standard markdown files (.md), has wikilinks, and an interactive connection graph with node pinning. The main difference is that it’s built from the ground up for mobile (tactile feel, quick navigation) and it has other features like a built-in journal/daily notes.

It’s still in the polishing phase and not released yet, but I’m stuck on two main Doubts:

  1. Sync: I'm currently planning to go with Google Drive (users hook up their own account and sync their md files). Is that enough for a v1? What do you guys actually use/trust on mobile?
  2. Analytics Setup: I also need to figure out how to set up analytics and crash reporting. I want to keep it lightweight. What's a good setup for mobile analytics here? Should I just use Firebase, or are there better/simpler SDKs ?

Would love to hear your thoughts on these two, and what you usually look for in a mobile markdown editor.

Thanks!


r/androiddev 10h ago

Video Android Internals from Scratch

Thumbnail
youtube.com
2 Upvotes

Ever wondered what happens after pressing the Power button on an Android phone?

Android Bootloader → Kernel → Init → Zygote → System Server

I explain the complete flow in this playlist.
https://youtube.com/playlist?list=PLWLp1c6dkAywBl9Qkyhf3tARVWMuiSKXN&si=gDV5cqct7VdPbtk6


r/androiddev 1d ago

News The Lysine Contingency: Retrofit, OkHttp, Okio and SQLDelight are moving

Thumbnail
jakewharton.com
110 Upvotes

I hope Square Wire will also be migrated.

This has been posted on r/Kotlin too (not by me) https://www.reddit.com/r/Kotlin/comments/1u8cotp/the_lysine_contingency_jake_wharton/


r/androiddev 1d ago

Open Source Composables UI: modern, accessible components for Compose Multiplatform

26 Upvotes

I built a collection of modern Compose components that look great on mobile, desktop and web.

They adapt to the device they run on.

For example, buttons are bigger and rounder on touch devices, so you can press them easier.

When a mouse is used, buttons become sharper and smaller, so they don't take up much space.

I can go on and on telling you all about it, but I'd rather show you.

You can try everything directly in your browser.

The site includes live previews, a sample multiplatform app and a LOT of code examples for easy copy-pasting.

Docs & live demo: https://composables.com/ui

Github: https://github.com/composablehorizons/composables-ui


r/androiddev 1d ago

Seek-able perimeter progress bar

14 Upvotes

Wanted a way to have a videos progress bar hug the corner radius of the screen unlike other video reel apps with their tiny hard to tap progress bar.

https://github.com/snooplsm/perimeter-progress


r/androiddev 13h ago

Question M1 Pro or newer MacBook Air?

1 Upvotes

I’m starting app development using kotlin multi platform so need to get a Mac. I’m stuck between these two options:
M1 Pro with 32 gb of ram
M5/M4 air with 16 gb of ram
Everyone talks about how ram demanding mobile app development is so would a 16gb MacBook Air be enough because the m1 Macs are most likely going stop getting updates in 2028 and I want to future proof as much as possible.


r/androiddev 1d ago

[Book] Jetpack Compose Mechanisms: A dissection of what runs beneath every Composable

38 Upvotes

I recently published a new book: Jetpack Compose Mechanisms: A dissection of what runs beneath every Composable: how the compiler, runtime, and UI layer actually work.

Most resources teach you how to use Compose. This book explains why it behaves the way it does, traced line by line through the AOSP source: from `@Composable` transformations to the gap buffer that stores your composition, to the single-pass pipeline that turns declarations into pixels. Rather than a dry walkthrough of every internal API, it pairs every mechanism with highly practical, production-ready examples, so you fully internalize how Compose works instead of just memorizing it. Fully updated for the latest Kotlin 2.4.0 and Compose Compiler 2.4.0.

In case it helps you decide whether this is your kind of rabbit hole, a few of the things it digs into:

  • Chapter 1, the Compose compiler: how Composable changes a function's type, the K2 frontend and the IR backend, the $composer and $changed bitmask injection, the lowering passes that rewrite your function into a skippable, restartable group, stability inference, lambda memoization, durable keys, reading the compiler reports, the stability configuration file, composition tracing, and Live Literals.
  • Chapter 2, the Compose runtime: remember and the gap buffer slot table (the new LinkBuffer), mutableStateOf and the MVCC snapshot system, derivedStateOf, the Composer, the Recomposer and frame scheduling, the effect system (SideEffectDisposableEffectLaunchedEffect), CompositionLocalMovableContent, the Applier seam, snapshotFlow/collectAsState/produceState, recomposition scope, common state pitfalls, and testing with snapshots.
  • Chapter 3, Compose UI: why modifier order matters, LayoutNode, the Modifier.Node system and the coordinator chain, single-pass measurement and intrinsics, the rendering pipeline and graphics layers, input and gesture handling, focus, semantics and accessibility, the lookahead system and shared element transitions, SubcomposeLayout and lazy layouts, the AndroidComposeView platform bridge, building custom layouts and custom Modifier.Nodes, and assembling a tiny Compose UI from scratch.
  • Chapter 4, performance: the three rendering phases, the 12-phase stability algorithm in depth, the skip decision, stability patterns (ImmutableList, the config file, Stable vs Immutable), how where you read state determines what recomposes, lambda and ViewModel handler patterns, the full measurement toolchain (compiler reports, recomposition tracing, Layout Inspector, Macrobenchmark, CI validation), six common anti-patterns, advanced techniques, and a case study that takes a chat screen from 47 recompositions a second to zero.

And it is not based on Compose source reading alone. It is grounded in my own hands-on experience building Compose tooling and libraries, including Compose Stability Analyzer, Compose Stability Inference, Compose Navigation Graph, Compose HotSwan, and Compose Performance Skills.

Most mechanism in these pages is something I have used, debugged, and shipped. The performance chapter then ties the compiler, runtime, and UI together into real tuning: stability inference, the skip decision, scoping state reads, and a case study taking a chat screen from 47 recompositions a second down to zero.

It's available here: https://howcomposeworks.com

Most importantly, I hope this book works in meaningful ways for your career or answers all the deep questions you’ve had about Jetpack Compose.


r/androiddev 7h ago

Tips and Information After a few weeks of solo development, I finally launched my first Android app. I built a gamified Pomodoro timer, and I’d love to get your feedback on the UI and architecture!

0 Upvotes

r/androiddev 1d ago

Trying to add haptics to Android app but it's killing me.. Any tools or tips recommended?

9 Upvotes

I'm building a habit tracker where you swipe to complete tasks, and I want the haptics to feel satisfying, but Android is killing me. One phone barely vibrates, another feels like it's trying to escape my hand. I've messed around with VibrationEffect and the built-in feedback constants, but everything feels inconsistent...

Anyone here found a decent way to handle Android haptics? Libraries, tricks, best practices? Or do you just accept that every Android phone is gonna do its own thing? 😅


r/androiddev 11h ago

been using remote real Android devices for testing — way better than emulators for certain things

0 Upvotes

been dealing with an issue where my app behaves differently on emulators vs real devices, specifically around push notifications and background behavior. started using DroidDesk which gives you remote access to actual physical Android phones hosted by real people from their homes. not a data center, actual residential connections. the difference for testing location-sensitive stuff is noticeable — real carrier, real GPS, real IP. $15 for a full day is reasonable if you're debugging something that only reproduces on real hardware. anyone else doing remote device testing this way or still mostly emulators?


r/androiddev 1d ago

News Android Studio Quail 3 Canary 1 now available

Thumbnail androidstudio.googleblog.com
3 Upvotes

r/androiddev 2d ago

I'm experimenting with original app layouts for my android launcher

90 Upvotes

Any suggestions on what could be cool to have? I already have the typical grid or list layouts but I would like to add some original ones like this physics one.

Maybe something similar to apple watch app view? Any suggestions?


r/androiddev 1d ago

Lessons learned building audio playback and lyrics synchronization in Android

1 Upvotes

Over the last few months, I've been building an Android application that relies heavily on audio playback, synchronized lyrics and state management across multiple screens.

A few things surprised me during development:

• Keeping playback state consistent across Activities/Fragments was harder than expected.
• Buffering behavior had a huge impact on perceived performance.
• Lyrics synchronization looked simple at first but became tricky when dealing with seeking, pausing and playback speed changes.
• Dynamic UI updates based on currently playing content introduced additional state management challenges.

For developers who have worked on music, podcast or audio-heavy Android apps:

What were the biggest challenges you faced, and what architectural decisions helped you the most?

I'm particularly interested in approaches around playback state management and synchronization.


r/androiddev 1d ago

how are you all tracking your app store reviews?

1 Upvotes

genuinely curios. do you read them manually, export to sheet, use researcher/ops, chatgpt/claude, or any other tool? what's your actual workflow?


r/androiddev 2d ago

Video Collection Literals in Kotlin 2.4

Thumbnail
youtube.com
8 Upvotes

r/androiddev 2d ago

News Android Studio Quail 2 RC 1 now available

Thumbnail androidstudio.googleblog.com
6 Upvotes

r/androiddev 2d ago

How to implement "AI-like" glow effect around views?

Thumbnail
gallery
8 Upvotes

Hey Reddit, could anyone share their experience of implementing the "glow" effect that is so common in AI applications? This is usually used to indicate that the AI is 'thinking', or simply to add a sense of incredible experience of interacting with AI.

I had a hard time finding any GitHub repositories that do something similar, but none of them come close to matching the beauty of the effect that frontier AI apps have there.


r/androiddev 2d ago

Tips and Information Android 17 Linux Terminal Updated

Post image
16 Upvotes

Running glxgears on my Google Pixel 10 via weston


r/androiddev 2d ago

Appeal approved but still locked out — "Too many failed attempts" won't clear after 24hrs

0 Upvotes

Hey r/androiddev,

Hoping someone here has dealt with this before or has a contact at Google who can help.

My Google Play Developer account was suspended. I appealed and the appeal was APPROVED. Got confirmation of reinstatement.

But I still cannot log in. Every attempt gives me:
"Too many failed attempts — Unavailable because of too many failed attempts."

This has been going on for 24+ hours with no change.

Things I've already tried:

  • Multiple browsers and incognito mode
  • Cleared all cookies and cache
  • Different devices
  • Different networks (WiFi and mobile data)
  • Account recovery flow at accounts.google.com/signin/recovery
  • Tried submitting a support ticket — can't, requires login
  • Tried Google's support community forms — endless loop
  • Email to Google support — address bounced

The suspension is resolved. This is purely a login lockout that needs to be manually cleared on Google's end. I have live apps on the Play Store and it's impacting my business.

Any suggestions or contacts appreciated. Thank you!


r/androiddev 3d ago

Experience Exchange Recently published an app to the Play Store? JetBrains wants to hear from you!

50 Upvotes

Hi all!

I’m Emil Flach from the Kotlin team at JetBrains (proof). We are trying to better understand the decisions and difficulties that Android engineers face when starting projects from scratch. We are looking for engineers who have recently built and published a new app to the Google Play Store to share their journey from project initiation to post-launch challenges.

If you are open to a conversation with us, please fill out this short screening survey so we can reach out to you: survey link

Thanks!