56
Stay up-to-date with latest news on Android Development! Content directly fetched from the subreddit just for you. Powered by : @r_channels
KMP Starter Template just hit 150 GitHub stars
https://redd.it/1vlqw2t
@reddit_androiddev
What Android development practices helped you write better apps?
When building Android applications, learning the basics is only the first step. As projects grow, things like code structure, performance, testing, and maintaining clean architecture become just as important as writing functional code.
For experienced Android developers, what practices or habits made the biggest improvement in the way you build and maintain apps?
I’m interested in learning what approaches have helped developers create more reliable and maintainable Android projects over time.
https://redd.it/1vlg2dp
@reddit_androiddev
Why are android builds so badly optimized?
iOS usually builds from scratch moderately fast. But building an Android app the first time takes over half an hour and is the only thing that makes all the fans on my Apple silicon mac start spinning. Worse is that sometimes the build just hangs forever with no errors, I waited over an hour when it was stuck on a task before realizing I needed to update a package.
It might just be the difference of Java/Kotlin compared to Swift which is a lot newer, but any other reason why the building experience is this bad?
https://redd.it/1vln2a2
@reddit_androiddev
Looking for a pattern catalogue for app architecture (Clean, Hexagonal, Onion, VIPER, RIBs…) and the criteria for picking one.
I'm not asking how to implement MVVM, MVI or Clean Architecture — I use all three daily. I'm also not asking "which of the three is best."
What I'm after is the wider *landscape* of architectural patterns, the way general software engineering has a whole body of literature on them, plus how to reason about picking one.
Concretely, I'm thinking at two levels:
\- **Presentation / UI layer:** MVC, MVP, MVVM, MVI and unidirectional data flow, VIPER, RIBs, Elm/TEA-style, explicit state machines.
\- **Application / system level:** layered n-tier, Clean Architecture, Hexagonal (Ports & Adapters), Onion, package-by-feature vs package-by-layer, feature modularisation, plugin/host architectures, event-driven and CQRS-flavoured designs.
What I'd love resources on:
1. **A map of the field** — what these patterns actually are, where they came from, and how they relate. Which are the same idea renamed, which are genuinely different.
2. **Trade-offs** — what each one optimises for and what it costs: indirection, boilerplate, build times, onboarding, testability, cost of refactoring later.
3. **Decision criteria** — how to pick one for a given app: domain complexity, team size and number of teams, expected lifetime, single app vs multi-module vs a library shipped to other teams, offline/sync needs, how much real business logic exists versus UI plumbing.
4. **Case studies and postmortems** — teams describing what they chose, why, and what they'd do differently.
Books, papers, conference talks, blog series or open-source codebases with a written rationale all welcome. It doesn't have to be Android-specific — most of this predates Android anyway.
For context: I work on a multi-module feature library that ships as an AAR into a much larger app, so boundary and ownership questions matter to me as much as UI-layer ones.
TL;DR: not "how do I do MVI", but "here is the space of architectural patterns, and here's how to choose between them."
https://redd.it/1vlgqlz
@reddit_androiddev
Do I need a Google Play account to distribute an APK offline after 2027?
I’m developing a POS application that I distribute directly as an APK, completely offline. I don’t plan to publish it on the Google Play Store.
I’ve heard that Google may restrict APK distribution outside the Play Store starting in 2027.
https://redd.it/1vkfuih
@reddit_androiddev
EdgeSpeech: Add voice I/O to your Android App
https://github.com/switchboard-sdk/EdgeSpeech
https://redd.it/1vkx9qo
@reddit_androiddev
RAM scraping futile: Password processing via 4-bit nibble streaming in memory
https://redd.it/1vkycha
@reddit_androiddev
Can we a little push Google to move basic hardware workarounds (like A2DP Bluetooth offload) out of Developer Options? Banking apps are breaking our phone workflow.
Hi people,
I ran into a frustrating loop several days ago that I've found many others have dealt with. My Bluetooth headphones (Sony WH-CH700N) suffer from the well spread audio silence bug (MediaTek chip in particular) unless I turn on "Disable Bluetooth A2DP hardware offload" inside Developer Options.
So far so good, the problem is that my banking app (United Bulgarian Bank / UBB) recently updated its security. It now completely refuses to open if `development_settings_enabled` is set to 1. Here and there I saw other such complains regarding banks in other countries.
To send a simple bank transfer, I have to go into settings, turn off Developer Options, restart (A2DP change requires restart), open the bank app, send the money, re-enable Developer Mode by tapping the build number 7 times, change the Bluetooth setting, and reboot again just to use my headphones.
This is in general very inconvenient choice by Google - toggles like A2DP hardware offload bypass and Show Taps are convenience settings and hardware bug workarounds. They do not expose cryptographic keys or grant root access or whatsoever, yet lazy banking apps check only the global developer flag.
I have opened an official Feature Request on the Google Issue Tracker to ask their core Framework engineers to migrate these low-risk hardware overrides out of Developer Options and into a standard "Advanced Settings" or "Accessibility" menu.
If you agree and find such suggestion useful, please have a look and click the Star icon or +1 Vote on this ticket to get Google's engineering team to notice it:
Google Issue Tracker Link: https://issuetracker.google.com/issues/544560848
Thank you in advance :)
https://redd.it/1vkkmhd
@reddit_androiddev
Android Studio Quail 3 Patch 1 now available
https://androidstudio.googleblog.com/2026/08/android-studio-quail-3-patch-1-now.html
https://redd.it/1vkqj7u
@reddit_androiddev
I got tired of playing word games alone, so I built one where you compete against someone 1v1
https://redd.it/1vkljtq
@reddit_androiddev
Changing country at google play developer
As far as i know it is not possible to change country at google play developer. I want to create a new account in country I moved to here I have self-employment would it be a problem I have 2 accounts? As a self employed person can I open personal account in the new country i move to? My old account is from 2015
https://redd.it/1vkfsf0
@reddit_androiddev
Closed Testing Android Game - GrapheneOS user gets error "device not compatible with this version" in Play Store even though it should work
Hello, I just started closed testing for my Android RTS game (https://www.youtube.com/watch?v=k1GLmnUOrz0).
Most users have access but one that is using grapheneOS is getting error message "device not compatible with this version".
What I checked:
- Device integrity requirement is set to basic in play console, user phone reports "Labels: MEETS_BASIC_INTEGRITY" so that should not be the issue
- All countries are enabled for the closed test
- User phone (Pixel10) meets SDK-Level and RAM requirements
Has anybody here dealt with a similar issue and was able to fix it? Thanks!
https://redd.it/1vkf4bt
@reddit_androiddev
Porting SDKs Painlessly with Gemini Pro
Thanks to Anti-gravity + Gemini Pro, porting the new SDK is easier than ever. I usually dread the annual SDK API upgrade task. However, AI makes this kind of work much more manageable.
https://preview.redd.it/vechvfnsnhih1.png?width=1984&format=png&auto=webp&s=4834c8bfcb11abfee9a63c6cfac4dfcc151ec69c
How's your AI experience in Android development?
https://redd.it/1vkcnhp
@reddit_androiddev
How to Hide Autofill in TextField Context Menu?
https://redd.it/1vk8edq
@reddit_androiddev
Why mocking clean architecture in this sub?
i genuinely want to know why people here mocking clean architecture? i used it in all companies i worked on. is there a reason? an alternative? i'm curious to know and learn.
https://redd.it/1vjuwa9
@reddit_androiddev
Can someone tell me is it necessary that your card credentials for fee of console account should match your own credentials exactly?
It's my first time and a bit confused about certain policies about app deployment
https://redd.it/1vlr0l9
@reddit_androiddev
Android Studio on android?
I want to make an android app but i dont have laptop and laptops are so expensive in my country
I have poco f6 and since AIDE removed i dont know what to do, any idea?
https://redd.it/1vlo0i3
@reddit_androiddev
Space utilisation
https://redd.it/1vliatu
@reddit_androiddev
My credits left the chat
I had junie cli for only 12hours and all the credits were gone. I only used to plan the project, had to renew claude to do the building.
https://redd.it/1vld3xr
@reddit_androiddev
\res & \assets
I have read many definitions for the res and assets folders, and I feel like there isn't much of a difference between them. The main difference is that res has strict naming rules, whereas assets has no rules and lets you organize files any way you want. Also, in the code, you can call any file from assets directly by its name/path. In contrast, for res, you must use a specific function or ID to call the file (I forgot the exact syntax for res, sorry!).
Anyway, it seems like anything you can store in res can also be stored in assets. I believe both store uncompiled resources, images, configurations, and layouts. Then, the compiled resources.arsc file stores compiled values like strings and maps the links between the resources in res or assets and the actual code in the .dex file.
So, are my words true, or am I just crazy?
https://redd.it/1vl163n
@reddit_androiddev
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.
https://redd.it/1vkzcws
@reddit_androiddev
Anyone knows if it's possible to boot the preloader from an microSD card instead of an eMMC in the MT6763T?
Hi, I have an old Cubot Kingkong 3, which is rooted, and I killed the preloader twice and resurrected it with SP Flash Tool (I was bored). This phone is 7 years old, and the eMMC is slowly dying, today SP Flash Tool told me that the eMMC is estimated to have used around 80–90% of its rated write endurance. However, PRE_EOL_INFO = 0x01 means the eMMC is still in the normal state and its reserved blocks have not reached the warning. I want to know if I can boot all the system (including the preloader) in an SD Card, so when it dies I can still use the phone. If it's not possible, there is any exploit of the BROM in this aged CPU? I would like to know any solution as I'm also learning about MediaTek and android low-level software.
https://redd.it/1vkvse7
@reddit_androiddev
Library Built A Compose Multiplatform Photo Gallery Library
While building my app for the Shipaton, I needed a simple, reliable way to read and delete local photos and videos across both iOS and Android. Handling media permissions and file operations cleanly in Compose Multiplatform turned out to take way more boilerplate than expected, so I decided to pull that whole engine out and package it into a standalone library called Pikto.
It handles fetching device media, displaying the gallery UI, and managing deletions on both platforms so you don't have to rebuild all that setup yourself.
I just published the first release and wanted to share it with anyone working on media-heavy CMP projects. Check it out and let me know what you think or if there are features you'd like to see!
Check it here 👉 **https://github.com/daniatitienei/pikto**
https://redd.it/1vkp31v
@reddit_androiddev
Any resources on how to implement the right architecture for your app?
after this post: https://www.reddit.com/r/androiddev/comments/1vjuwa9/why\_mocking\_clean\_architecture\_in\_this\_sub/
i realized that there is no 1 way to architecture your app, it depends on your app needs, so i'm wondering if there are any good resources on this aspect like we have for system design or nothing exist?
https://redd.it/1vkple5
@reddit_androiddev
SimpleDroidBLE - Kotlin/Android bindings for SimpleBLE
Hey everyone!
I posted here last year when we first added Android support to SimpleBLE, and we’ve been busy since then. I’m back to share what has changed, especially on the Android side.
For those who don’t know, SimpleBLE is a cross-platform Bluetooth library with a very simple API that just works, allowing developers to easily integrate it into their projects without much effort, instead of wasting hours and hours on development.
The biggest update is the progress we’ve made on SimpleDroidBLE, our Android-only Kotlin wrapper built on top of the same SimpleBLE core. It is now available as a beta on Maven Central:
dependencies {
implementation("org.simpleble:simpledroidble:1.1.0")
}
Why another Android BLE API?
If you’ve worked with Android BLE before, you already know where things get painful. The platform APIs expose a lot of state, a lot of callbacks, and a lot of opportunities for subtle bugs to creep in.
SimpleDroidBLE follows the same design principles that make SimpleBLE easy to use. It still uses Android’s Bluetooth stack underneath, but gives your application a much smaller API to own. The goal is to make common BLE workflows easier to reason about and easier to ship without building a pile of wrappers first.
I also replaced the old Android example with the SimpleBLE Explorer. If you want to evaluate the library before integrating it into your own app, this is probably the best place to start. You can find more information on the Android guide or by checking out the source code.
This is still in beta, so things might still break or change as we improve it, but it should be good enough to start validating ideas and testing it in real Android workflows. If you give it a try and run into rough edges, I’d really like to hear about them.
Want to know more about SimpleBLE's capabilities or see what others are building with it? Ask away!
https://redd.it/1vkeipd
@reddit_androiddev
App indexing issue?
https://redd.it/1vkfzov
@reddit_androiddev
Play Store "Install" button missing for returning users + Encrypted Storage surviving uninstalls. Need advice!
Hey everyone, dealing with two weird production bugs on our Flutter app and need some advice from anyone who has faced this.
**Issue 1: The Missing "Install" Button** Few users who uninstalled the app cannot reinstall it. The "Install" button is completely missing from the Play Store.
* **What we tried:** Cleared Play Store and Play Service cache/data. Swapped Google accounts on the affected phone. Nothing worked.
* **The weird part:** We have the *exact same phone model* in our office, and it installs from the Play Store perfectly fine!
**Issue 2: Tokens Surviving Uninstalls (Error Loop)** When users *do* reinstall after a long time, their old JWT tokens are still present on the device (even though `android:allowBackup="false"` is set in the Android Manifest file).
* **The bug:** The app boots up, finds the old token, and tries to fetch the user profile. The backend rejects the expired token, but the app misinterprets this as a generic network failure and shows a "Connection Error (Retry)" popup. The user gets stuck in an infinite retry loop.
Any insights or recommended fixes would be hugely appreciated. Thanks!
https://redd.it/1vkdto3
@reddit_androiddev
Letting the agent drive the app
Disclosure: this links to my own blog post and my own repo, both free, nothing to sign up for.
The TLDR:
As of now, it is hard for the coding agent to see what it is building, relying on us humans to be its eyes. So instead of letting us be the bottleneck, I've prompted Claude to build:
\- A tiny HTTP server embedded in the debug build, reading Compose's OWN semantics tree from inside the app, instead of a lossy copy scraped from the outside through adb
\- A small CLI on top of it, so the agent types "probe ui-snapshot", "probe tap", "probe screenshot" and knows exactly what is on the screen right now, after every single edit
\- Impossible to ship: it's a debug-only dependency, so there is no probe code in the release APK at all. Not "guarded by a flag", absent
\- Every session becomes a test: the steps the agent performed to check itself are saved as a YAML flow with JUnit XML, so they run on an emulator in CI instead of evaporating
A 13 step flow now runs in about 2 seconds and nobody looks at anything.
I open sourced the whole demo project, and the full prompt that builds it. Hand it to your own agent and it will wire the same thing into your app.
Demo project: https://github.com/galex/toy-app
Write-up, with the architecture and a video of a flow driving the app in real time: https://galex.dev/posts/how-to-make-your-coding-agent-fully-independent/
Let me know what you think ❤️
https://redd.it/1vkbxmj
@reddit_androiddev
Launch plans for our Andriod
What are the pitfalls developers bump into when launching andriod for the first time. I am going to be launching this week. Recommendations?
https://redd.it/1vk5q55
@reddit_androiddev
Firebase App Check (Play Integrity) blocking 100% requests on Play Store Internal Testing build, but logcat shows token success. Help!
Hey everyone, I’m pulling my hair out over a Firebase App Check issue.
I’ve implemented the Play Integrity provider for App Check in my Android app. When I run the app in Debug mode directly from Android Studio using the Debug App Check Provider, everything works perfectly and requests are 100% verified.
However, when I test the actual Release build, Firebase blocks everything.
The Setup:
Built a signed .aab (Release) in Android Studio.
Uploaded to Google Play Console -> Internal Testing track.
Downloaded the app to my phone via the official Play Store tester link.
The Problem:
Firebase App Check dashboard shows 100% "Unverified: invalid requests".
However, my logcat shows absolutely no errors! PlayCore successfully requests and receives the token (requestIntegrityToken -> onServiceConnected -> onRequestIntegrityToken all fire successfully).
What I’ve already done:
Copied the Upload Key SHA-256 fingerprint into Firebase (Project Settings & App Check).
Copied the Google Play App Signing Key SHA-256 fingerprint from the Play Console into Firebase.
Cleared app data/reinstalled fresh from the Play Store.
Since the app works flawlessly in Debug mode, and the Release app is generating tokens perfectly via Play Integrity in the logcat, but Firebase is still rejecting them as "invalid"—what am I missing? Is there a delay in propagation, or a hidden 3rd SHA-256 key I don't know about?
Any help is hugely appreciated!
https://redd.it/1vjrevz
@reddit_androiddev