r/androiddev

Lessons from building a deal-aggregator app: expiring content is a harder cache problem than I expected
▲ 4 r/androiddev+4 crossposts

Lessons from building a deal-aggregator app: expiring content is a harder cache problem than I expected

Native Android, Kotlin. The app aggregates time-limited free-game offers from a bunch of storefronts. Sounds like a simple list screen. The expiry semantics are what made it interesting.

A few things I got wrong first time:

Stale data is worse than no data here. A normal feed can be five minutes behind and nobody dies. In this app, a five-minute-stale card means someone taps through to an offer that just closed and concludes the app is broken. I ended up [describe your approach — server-side refresh cadence, TTL, invalidation on open].

Countdowns and lifecycle. Every card renders a live countdown. Naively that's one ticker per visible row and the list stutters. I moved to [single ticker driving state / whatever you did] and made sure it stops on onStop so it isn't burning cycles in the background.

Device clock lies. People's clocks are wrong, sometimes by hours, and timezones make "2 days left" ambiguous. Everything is stored as UTC instants and I [compute offsets against a server timestamp / etc.] rather than trusting local time.

Sorting by expiry means the list reorders under the user's thumb. Genuinely annoying if you don't handle it. I [describe: stable keys, no resort while scrolling, etc.].

Offline. The list has to render from cache the moment it opens, then reconcile. Room + [your setup].

Happy to go deeper on any of it. The app is GamesBolt if you want to see the result: https://play.google.com/store/apps/details?id=com.auragames.gamesbolt

If anyone's solved the "list that reorders itself while you're reading it" problem more elegantly, I'd like to hear it.

u/Arslanchaudhry — 6 hours ago

Android is expanding per-app memory limits.

Across the Android ecosystem, hardware dynamics are shifting. While user expectations for speed and smoothness keep rising, device RAM capacities are staying flat—or even tightening. Memory is no longer just a background engineering detail—it directly impacts your app's retention, crash rates, and user perception.

Here’s how to get ahead of memory constraints before your users feel them:

1. Monitor at scale with Android Vitals: Check Google Play Console’s latest metrics for Memory Usage (RSS + swap) and Bitmap Memory Usage across different process states (foreground, background, cached) to identify outliers.

2. Catch terminations with Firebase Crashlytics: Update to Crashlytics v20.1.0+ to get clear visibility into Out-of-Memory (OOM) exceptions and Memory Limiter terminations in the field.

3. Capture production traces with ProfilingManager: Leverage Android’s ProfilingManager API to trigger automated heap dumps on TRIGGER_TYPE_ANOMALY or TRIGGER_TYPE_OOM directly from production builds.

To keep devices fast and responsive, Android 17 introduced per-app memory limits. Starting on Pixel devices, this system is now rolling out across more OEMs and device configurations (spanning 4GB to 16GB+ RAM tiers).

Check out the full breakdown and diagnostic guide on the Android Developers Blog:

https://android-developers.googleblog.com/2026/08/app-broader-memory-limits.html

#AndroidDev #MobileDevelopment #AppPerformance #Android17

u/MatthewAtGoogle — 7 hours ago

Publishing new on Aptoide now requires Google Identity Verification?

I checked the Aptoide documentation. My reading of it was that Google Identity Verification is only necessary to have your app continue to work on 'genuine devices'. My assumption is that after Sept 30th they'll have a genuine badge on the store and filter your app from genuine devices.

The Aptoide-Connect guide says this:

>'Register every package name you distribute so your apps stay installable on certified Android devices once verification is enforced for the stores and channels you use - see the rollout below.'

[...]

>What happens if I don't complete it?
Once verification is enforced for a given store, region, and channel, apps that are not registered by a verified developer can be blocked from being installed and updated on certified Android devices

The AptoideConnect APK submission form however suggests that its mandatory?

>Verify your Android developer identity
Required by Google for alternative distribution. Complete the verification steps to proceed.

Clicking the 'I Have Already Done It' button 403's without any visual feedback. For new app distributions is this crap already required now?

I will definitely contact support and update my post regarding this issue 'cuz I'm not wasting time filling out the entire form just for this to be a blocker. Hope this can help others choosing what app store they want to distribute on

I would be disappointed if a major 'alternative' appstore played ball with google

reddit.com
u/imacguyver — 8 hours ago

[AMA] I'm Jaewoong Eum (skydoves). Ask me anything!

That’s a wrap for the AMA!

Thank you so much to everyone who joined and asked such thoughtful questions. There were way more than I expected, and honestly, I feel like I learned a lot from the conversations too.

There are still a few questions I didn’t get a chance to answer during the session, but I’ll try to come back and go through them one by one when I have some time.

Thanks again for all the great questions, kind words, and conversations today. I really enjoyed it.

And wherever you are in your journey, I genuinely hope the things you’re working on go well and take you somewhere meaningful.

Thanks everyone! 🙌

====================

Hey everyone!

First, a huge thanks to the mods for organizing this AMA and for the teaser posts over the last couple of days.

I'm Jaewoong Eum, probably better known here as skydoves. I've been sharing open-source projects, articles, books, experiments, and whatever I've been learning along the way on r/androiddev for many years.

These days, I spend time working on open-source libraries(Compose Stability Analyzer, Balloon, Landscapist, Compose Nav Graph, etc), writing some books, and building developer plugins (Compose Hot Reload for Android). I also work at RevenueCat, so I'm happy to talk about monetization, subscriptions, or Shipaton 2026 as well.

But this is an AMA, so it definitely doesn't have to be limited to technical questions.

Feel free to ask me anything about:

  • Open-source and maintaining libraries
  • Developer tools and some of the plugins I've been building
  • Career, community, writing, or developer relations
  • RevenueCat or Shipaton
  • Or honestly, anything you're curious about

You can start leaving questions now, and I'll begin answering at the scheduled AMA time and stick around for the session.

Really looking forward to chatting with everyone. Ask me anything! 🙌

AMA time: Wednesday, 19 August, 11:00–13:00 UTC. That’s 13:00–15:00 Berlin, 12:00–14:00 London, 07:00–09:00 New York, 04:00–06:00 San Francisco, 16:30–18:30 Delhi, 20:00–22:00 Seoul, and 21:00–23:00 Sydney, or here it is in your own timezone.

u/skydoves — 18 hours ago
▲ 43 r/androiddev+26 crossposts

[Help needed] I need advice about a new video on the Play Store for my app

This is the app (called "LWP+"), and I've shown here the video that I've published there:

https://play.google.com/store/apps/details?id=com.lb.lwp_plus

At first I was happy about what I created on the video, but then I thought that it looks more like a tutorial here, instead of maybe focusing on what's the most interesting. Surprisingly, ever since I've published the video, it actually got quite some views already (29 after 2 days), despite the fact it's a bit of a niche app. Still, I think maybe it can be improved.

I want to know what you guys think about the video (which has audio, BTW).

Here's about the app:

It's a live wallpaper app, that has these features:

  1. Allows showing color/image/animation/video as content (users choose the file from the file system). No special effects so some users that complain about the dimming/zooming effects actually like using it. Users can also choose whether it should scroll or the type of automatic cropping.

  2. Allows (some) control over the Material-You colors of the OS, as it lets users to choose the colors to report the OS about what's on the wallpaper. This means that like on Android 17, users can choose the colors they want (if the OS supports it) despite the content not matching it.

  3. Setting of double-tap to lock the screen. Some launchers don't offer this, so I added it to the app too.

  4. Some extra flags that (on some devices) should affect colors further, such as black/white text and/or black/white icons on status bar and/or lock screen and/or launcher.

The app is completely free, ad-based. Users can remove the ads including by just watching full screen ads. Originally it was created to offer dark-theme on devices as it wasn't a toggle on the OS settings, and was based on the colors of the wallpaper.

u/AD-LB — 20 hours ago

Has anyone tried building Android apps with Rust + Native UI?

I have been currently assigned a project which needs to be cross platform + dynamic feature delivery (business requirements)

I'm thinking about writing my feature modules/business logic in rust to create native binaries which I can include with the android and IOS build and then include those .so/.a files with the build and communication between them will be from ffi (don't know which ffi approach works best raw JNI, UniFFI, or hand‑rolled C ABI)
Apple doesn't allow dynamic features installation so only android build will have that, IOS will just install everything at once
For UI I'm thinking to either go with Compose Multiplatform or just Compose for android side and Swift UI for IOS side (The app only has 3 screens so ui doesn't really matter as most features work in background)

Has anyone tried anything similar , where should I start experimenting, I don't want to waste time in approach that will be in vain, would love to hear your experience.

PS: Using rust as equivalent windows and MacOS app is also made in rust + imgui and I can use lots of code from there to make mobile app dev easier

reddit.com
u/fireplay_00 — 15 hours ago

Which Gradle task would you hand off to an AI agent?

I work at Gradle, and we're building agent skills. We currently have five candidates:

  1. Run Gradle correctly (gradle-cli) — right task, right flags, version-aware
  2. Best-practices lint (gradle-bestpractices) — flag legacy patterns, suggest the current one
  3. New project bootstrap (gradle-init) — Android/KMP scaffold, version catalog
  4. Upgrade + deprecations (gradle-update) — bump the wrapper, rewrite what broke
  5. Configuration cache migration (gradle-cc) — find what breaks CC, refactor it

Which would you actually use? What do you want to see instead?

reddit.com
u/Party_Till_I_Die — 11 hours ago

What do you think of the aesthetics of these apps?

Could you rank them from best to worst?

For example: 2 7 5 3 4 12 13 1 8 6 9 11 10

Or simply tell me which is the best, which is average, and which is the worst

u/Capusotes — 1 day ago

Supabase Kotlin SDK in production — is this good enough or would I regret not using Firebase instead?

I am making an Android math game in Kotlin with Jetpack Compose in MVVM architecture. Right now it is currently local-only using SharedPreferences for testing purposes, and I am looking to add a backend for cross-device sync and login, with it coming down to Firebase and Supabase. I am leaning more towards Supabase but the AndoidSDK part is the one part I am mostly unsure about.

I am leaning more towards Supabase because the main feature is using teacher viewing class reports on how students did, which is one big reporting screen which I saw could potentially be quite a bit expensive with firebase, as it is billed per read, whereas on Postgres it's a single join with a group by. The data is also relational as it is teacher, class, students, etc. and I will not store almost anything by students on purpose, except their first name, which is easier with Supabase.

It seems to favor Supabase but what I want to know is:

Does the flow and coroutines integration work cleanly in a compose app, or are there issues like lifecycle or reconnection issues once you get past a demo? How reliable is realtime compared to firestore? Any issues or things to know about when the persistence across the app restarts? If I hit a strange edge case would I have to dig through a library source?

I am a little worried that I would save money on the reads and then I would lose just about all that time fighting an immature client. If anyone has shipped an app on supabase-kt, would you do it again, or would you go a different direction? Or perhaps there is something I am missing about Firebase, and if so, I would love to know.

reddit.com
u/Spiritual-Ask-2868 — 1 day ago
▲ 4 r/androiddev+2 crossposts

built a mobile only interview prep site. missing anything obvious?

so when i originally wanted to leave my first ios swe job i found that mobile interviews feel weird compared to generic swe prep. backend engs have a much easier time because they follow a more well defined, paved loop that mirror new grad interviews.

on the mobile side half the loop is stuff like lifecycle, concurrency, "build this small app in an hour", debugging a janky project, and mobile flavored system design. not just invert a binary tree on a whiteboard which i spent hours prepping for and only was a small part of the overall interview process.

in order to figure it out i cold dm'd a ton of random ios engineers and barely got any responses + i failed my first 5 interviews just to get the hang of it. i kept bouncing between random blog posts, leetcode, and youtube so i put together something for myself and figured i'd share it in case it helps anyone else prepping.

it's called acemobileinterview. ios + android tracks with:

- general fundamentals + algorithms (free)

- timed xcode / android studio style projects

- buggy starter zips for debugging practice

- system design + behavioral stuff

i'm not trying to spam this everywhere and also genuinely curious what you'd add or cut if you were prepping for a mobile loop right now.

site: acemobileinterview.dev

happy to answer questions about how i structured it or what's in the ios vs android tracks. for context i've been an ios engineer for 6+ years and have made several job switches + gotten offers from netflix, duolingo, patreon, + many more

My own telemetry vss Play Console reporting lag - how long does initial backfill usually take?

I recently soft-launched a new utility/security app on Google Play and am doing some in-my-network outreach to test build stability before my main launch.

I’m collecting anonymous telemetry data, including unique users and simple activity metrics (just firing a hashed device/session ID on first launch for internal telemetry). So far I have ~8 distinct active installs over the past week.

But on my Google Play Console, the dashboard and acquisition stats are still sitting at a flat 0, and Reach metrics, Android Vitals, Ratings and Reviews all show "Data unavailable."

I know batch processing, UTC timezone rollups, and anti-fraud filters mean Play Console statistics lag anywhere from 24–72 hours (or even longer for fresh apps/accounts without a baseline traffic volume). I also know Android Vitals requires a minimum sample size of users opted into "Usage & Diagnostics" sharing before anything populates.

Support mentioned it can take several days or SEVERAL WEEKS to catch up on a new listing, but I’m curious about real-world developer experiences here:

  1. How long does it typically take Play Console to start displaying initial install numbers for a brand-new package ID?
  2. When you do soft launches or pilot runs, what custom telemetry or analytics setups do you rely on for real-time visibility instead of waiting on Google’s pipeline?

I’m interested to hear how folks here handle early-stage launch tracking without relying purely on Console stats!

Thanks for any feedback

reddit.com
u/CanaryScan_admin — 1 day ago
▲ 4 r/androiddev+1 crossposts

Need help getting a better understanding and improve in Android development

Hi Everyone,

I have a question on how to approach the situation im currently in.

I got a software developer role in a banking solution company which uses mifos opensource tools and im currently working in the mifos Android client .

I have basic understanding and basic knowledge of android development i learned from udemy and youtube but i was just given a massive codebase which uses concepts i dont know and it overwhelming me.

So, I need guidance from experienced professionals how did you tackle this situation or how will you do it to get a better understanding of Codebase and improve my skills and develop quality code .

Also im a beginner,so if you dont understand my question feel free to ask for clarification i will provide it and help me to get a better understanding of Android development itself and how professionals do their work.

Thankyou

reddit.com
u/Hamdhan1 — 2 days ago

How can I handle payments if I can't use google merchant in my country?

Hello everyone!

Im a solo dev based in Morocco, and I built an app and I finished all the steps to publish. I had wired in in-app-purchases (1 time fee, pro forever) there is no subscription or anything like that. Then when I went to configure my merchant account to collect payments, Google stopped me because that isn't allowed in Morocco.

I can run ads with admob or 3rd party providers, but I can't use google play payments or sell the app for a price on Google. I can just do "free with ads".

I personally HATE ads, especially ones that breka immersion (full screen), I do have another game that uses ads but it is 100% optional and you can literally finish the game in a couple of hours without seeing a single ad. No timers, no special currency or any crap like that.

Back to my app. I really do not want to use ads in the app, (I will if it's my last resort) but I prefer a one and done payment.

After some research I found a couple of workarounds but they're all tedious:

  1. Setup an LLC in the UK or US or Estonian digital residency and create a new account. 200 - 500 Euros minimum in fees plus a lot of extra work at the start, and more work to maintain that.

  2. Build a website with the entire functionality and users can manage their "license" through there. Less tedious than LLC route, but I do have to create and maintain a whole separate branch of my app. Also it takes the users out if the app, and requires paying outside on a separate website and I think that will cause people to trust it less, so less conversion.

  3. Have a relative or a friend abroad open another Google play account and transfer ownership. Easiest, but also a huge risk. I don't plan on the app making 1 million dollars on year one, but still it's a risk to consider if I get in a dispute or something were to happen to that person, especially since they're in another country.

  4. Accept my faith, redo the whole thing and use ads and just accept that I can't give the same clean pro experience and my users just have to deal with it because "everyone else does it"

What are your thoughts people? What do you think is of the best option for me? Did I miss something? And is there someone in a similar situation that found a better workaround?

reddit.com
u/Solid-Incident6666 — 1 day ago

Advice for my Android students about using AI?

I teach Introduction to Android Programming at a community college. I stress to my students the importance of learning the basics to build a foundation of knowledge in terms of developing apps, writing in Kotlin, designing app architecture, etc. At the same time, I do allow them to use AI tools because I also understand it's important for them to know how to do that. (I ask that they use them to help, not do.)

If anyone has any advice or words of wisdom to pass along to my students (who are new to Android), please share. In particular, I am hoping to reinforce the importance of learning the material for themselves (rather than relying on AI to do it for them) at this early point in their development.

I truly believe they have to learn the basics in order to be able to successfully use AI tools down the road. If anyone has any real-world anecdotes or thoughts that back this up, please share! (Or, if you disagree or have stories that contradict this, I'd love to hear those, too!)

Thanks in advance.

reddit.com
u/Complete-Ad-1020 — 2 days ago

AMA with u/skydoves tomorrow

Hey everyone,

Tomorrow is the AMA with u/skydoves (Jaewoong Eum). Yesterday I wrote about how long he's been part of this subreddit. Today I want to cover what he's been working on lately, because a lot of it is directly useful if you're in the middle of Shipaton.

Most of his year has gone into Compose performance. He built the Compose Stability Analyzer, an IDE plugin that shows you which composables are skippable and which parameters are dragging them down. Then he added a live recomposition heatmap that overlays real counts from your running device on top of your source. The most recent version tells you whether the compiler's stability predictions actually hold up at runtime.

He's also been working on hot reload. Compose HotSwan brings Compose hot reload to real Android devices with your navigation stack and state left intact, and he's since got it running across several devices at once. In June he shipped a plugin that draws your whole app flow as a map of rendered previews and typed arguments, which went down very well here. There's also a set of agent skills for Compose performance and a way to tune animations without rebuilding the app every time you change a value.

Since joining RevenueCat he's been open sourcing the UI you need around a paywall. Placeholder loading effects. A slide to unlock component for Compose and KMP. A collection of paywall animations. A complete working paywall wired up to Play billing through the RevenueCat SDK.

Every Shipaton entry has to use that SDK for at least one purchase, and he's the one who has been building the Compose side of it in public. If you're stuck on a paywall, or on anything else, tomorrow is your chance to ask.

Please don't post your questions in this thread. Wait for the AMA post from u/skydoves tomorrow and ask them there.

If you missed them, the Shipaton announcement has the details and the first megathread is where people are posting what they're building. Submissions close on 30 September, so there's still time.

Don't miss the AMA tomorrow, Wednesday 19 August, 11:00 UTC. 13:00 Berlin, 12:00 London, 07:00 New York, 04:00 San Francisco, 16:30 Delhi, 20:00 Seoul, 21:00 Sydney, or here it is in your own timezone.

See you there.

u/borninbronx — 2 days ago

Architectural patterns in large scale apps.

in our mid sized startup, we have over 100 android engineers on one app, divided by squads, so we have a lot of squads, each one is working on a feature, a library needed, design system and custom components libraries etc, all these modules/libraries are published to maven and added as dependencies on the core app repo, my squad works on an isolated feature so it's easy to integrate into core app repo, but i attended guild meetings and saw RFCs mentioning circular dependencies, hexagonal, onion, plugin etc architectures because some modules/libraries depend on each other, communicate with each other, initialization order problems of modules etc etc etc, i feel stupid tbh and i'm glad i'm working on an isolated feature library in which we use usual architecture stuff. anyone has resources: talks, books, articles etc that cover this kind of topics and architectures and engineering problems in big scale apps with big scale teams and modules/libraries?

reddit.com
u/amranya — 2 days ago

How are people actually handling state in large Compose screens?

I'm genuinely curious how teams are handling this in larger apps, because I'm not convinced we've fully solved it.

Before Compose, MVVM/MVI gave us a fairly clear direction: keep the screen state in the ViewModel, expose it, render it, test the transitions.

With Compose, we now have local state, state hoisting, state holders, StateFlow, snapshot state, rememberSaveable, and plenty of different ways to split ownership.

That flexibility is useful, but on a large screen it can also get messy pretty quickly.

If you keep everything in one UiState, it can become huge and start coupling unrelated parts of the screen together.

If you split state too much, you can end up with ownership spread across the ViewModel, composables and state holders, which can make the screen harder to reason about as a team.

Then testing adds another layer. What do you keep centralized because it makes behaviour easier to test? What do you leave local because it is really just UI state? Where do side effects fit without turning the ViewModel into a coordinator for every tiny interaction?

I don't really have a strong answer here.

For people working on large Compose codebases with multiple engineers:

How are you structuring state today?

One UiState per screen? Multiple state objects? State holders? Mostly ViewModel state with some local Compose state?

And more importantly, has that approach actually held up well for testing, maintenance and team ownership?

Sometimes I wonder whether Compose solved the old state-management problems, or just gave us more ways to distribute them.

reddit.com
u/devbitsxyz — 2 days ago