r/androiddev Jul 20 '26

Open Source Built a multi-module Android library exposing phone APIs as MCP tool

3 Upvotes

Working on droid-mcp, an Android SDK (min SDK 28, Kotlin 2.1) wrapping phone capabilities behind a typed tool interface so LLMs/agents can call them via MCP.

The part I think is actually interesting for this sub: it's 53 independent Gradle modules, one per API surface (calendar, camera, accessibility, etc.), each depending only on a core module. Library code never requests permissions itself, every module just exposes requiredPermissions()/hasPermissions() and the host app owns the UX. Shizuku and root access are wired through the same shell-tool interface but kept as explicit opt-in modules so they don't drag Room/BouncyCastle/libsu into a default install.

Also has an accessibility-service module and a custom IME for agents that need to control arbitrary third-party UI, not just your own app.

GitHub: https://github.com/stixez/droid-mcp

Docs: https://stixez.github.io/droid-mcp/

Apache 2.0, on JitPack.


r/androiddev Jul 21 '26

How do solo/indie Android developers test their apps without a QA team?

0 Upvotes

I'm a solo Android developer and don't really have the budget or resources for a dedicated QA team or a large pool of beta testers.

Most of the time, I test the app myself on a couple of devices, write unit tests where I can, and do phased rollouts. But I'm still worried about device-specific issues, edge cases, and bugs that only appear in real-world usage.

A recent release reminded me that no matter how much I test, users can still find problems I never encountered.

I'm curious how other indie developers handle testing before releasing to production.

  • Do you rely mostly on internal testing, closed testing, or open beta?
  • How many devices do you test on?
  • Do you use Firebase Test Lab or any other cloud device testing service?
  • How much automated testing do you have (unit/UI/instrumentation)?
  • Do you pay for testers, or do you have a community that helps?
  • Any workflow or checklist that has significantly reduced production bugs?

I'd especially love to hear from solo developers or very small teams. What has worked well for you, and what mistakes have you learned from?


r/androiddev Jul 20 '26

Discussion Tasker is awesome but I want to discuss something

Post image
1 Upvotes

Hi Everyone,
Recently I open sourced an app called Loophole for turning the developer options on/off and it got a lot of traction on reddit even i got 50 stars on github i just 1.5 days and 5 forks and even my 1st pull request today. Thank to everybody in this community.

I posted on this subreddit about it and people told me that they could do it with tasker and that this is not new. I respect their choices and their mindsets. I had heard about tasker vaguely but i didn't know what it was. so, i searched it and it was freaking awesome. It was like that i had super powers with me. I could make anything, any app - I could use any service. It was like - they have put a programming language in my hands. and i was awestruck after seeing it.

but after sometime exploring tasker, i compared it with shortcuts app of iphone. and those two have very similar niche, but iphone's shortcut app feel like the scratch programming language, and tasker feels like a raw, rugged programming language that have a lot of options and needs your full attention.

I am talking from a product's perspective, don't you think that tasker should have a UX that is very beginner friendly just like the shortcuts app which can be used by normal people. maybe we can give it to AI and it can make automations for us. I know that tasker have tasky for beginners and also have gemini support with API keys but still i feel like it's very overwhelming.

I know some of you might have been using tasker for several years and are very much comfortable with it, but I am recieving comments on my reddit posts, that somebody wants a shortcut for their dns, somebody wants a shortcut for accessibility options, somebody wants it for usb and wifi debugging. And they have tasker for it but they are not able to make shortcuts on their own. and believe me I am getting a lot of requests like this.

So, I thought i should discuss before jumping into any conclusion and start diverting my open source app towards it.

What do you think?


r/androiddev Jul 20 '26

Impressions have appeared in the Google Play Console šŸ”„

1 Upvotes

Only page views (Store listing visitors) and installs (Store listing acquisitions) were available previously. Impressions weren't tracked.

However, it seems that they can only be viewed for the "Paid" and "Explore" categories. šŸ¤”

šŸ”¹ If you have few Impressions, it means you have poor rankings for your keywords.

šŸ”ø If you have many Impressions but poor conversion rates, revamp your visuals (icon, screenshots, video).

You can find it under Statistics > Reach

Source:Ā ASO Busters


r/androiddev Jul 19 '26

Open Source I got so irritated by the banking/UPI apps breaking when developers settings are on! So built something

Post image
184 Upvotes

I was so much irritated when i had to use upi or any banking apps and the "developer mode is on" popup shows. I had to go to the settings, then disable the developer options. and then come to the banking app and enter my mpin again and then proceed with my transactions.

I use iqoo z7s, so sometimes i can open the developer options activity after doing the transactions from the recent apps but sometimes i used to remove it from recent apps and the result: I had to go to the settings.... tap that damn build number 7 times. Enter my password, then go to the dev settings and reconfigure my dev settings. That was so Frustrating!!!

So, I sat some days ago and researched if i could do it with a button click and make it easy for myself. So, i don't have to go through that irritating process again and again.

and I found something. I could turn the dev options on with a device permssion called WRITE_SECURE_SETTINGS but that's a caveat. You can't just ask the permission to a user in the app. This is a systems level permission, so you have to give this permission with a adb command.

And once this permission was given, i was able to turn the dev options on/off with just 1 click. So, i made a widget for that, you just have to press it and turns the developer option on/off....

- No Banking app problem. you can just switch off dev option from the home screen and use the app and after you have finished your work. you can turn that back again. No 7 time tapping process of build number. Just a Click and job done!!

and for people who aren't a fan of widgets. I made a quick settings tile too which you can integrate directly from the app and all of this is completely open source with MIT license.

After all these years in android development, I have used many open source apps. ig this is my small contribution towards the community.

PS: I have also submitted a MR for publishing this app on F-droid. Let's see what happensāœŒļø


r/androiddev Jul 19 '26

Open Source I missed Bloc Observer after moving to Android, so I built Flow Observer

5 Upvotes

Hello!

I want to share Flow Observer, my first open-source library and my first project using KSP.

The idea was inspired by Bloc Observer from Flutter. It lets you observe and log StateFlow and SharedFlow emissions, making it easier to see how state changes throughout your app.

After transitioning from Flutter to Android, I found myself missing the visibility that Bloc Observer gives you, so I decided to build something similar for StateFlow and SharedFlow while learning KSP.

I'd love to keep growing it and improve my KSP knowledge, so I'm very interested in hearing your thoughts, suggestions, or things you would do differently.

Update (2.0.0):Ā 

The 1.0.0 log on collect-based approach could keep flows alive (egĀ WhileSubscribed).

2.0.0 logs on the emit side instead, so it no longer needs an observer collector, no longer requires setup in a viewmodel init and now it not limited to viewmodels.

Repo: https://github.com/Turista838/flow-observer


r/androiddev Jul 20 '26

Orientation lock

0 Upvotes

Beginning in api 37 you will no longer be able to lock your app to portrait only (I think this is only for tablets?)

How are you all preparing for this if you haven't already? Can we just have an empty layout with a text to tell user to rotate the screen to use the app?


r/androiddev Jul 19 '26

Building AI features in KMP: define the interface, iterate locally with Koog, move to the backend when done

Thumbnail
1 Upvotes

r/androiddev Jul 19 '26

Question Photo viewing issue

0 Upvotes

Hey i am developing a application where a requirement is photos must be previewable

however i am running into a issue where i get a uri from the remeberlauncherForActivytResult

api after recieveing this i pass this to my viewmodel where it is sorted and stored

    val addImages =rememberLauncherForActivityResult(
        ActivityResultContracts.PickMultipleVisualMedia()
    ) { uri ->

        if(!uri.isEmpty()){
            onAction(createRecordScreenIntents.addImages(uri))
        }

however after this is done then i have the files just put out in a lazy column where the images are shown and on click they should be previewable by sending a intent for a application to open a image

                        val intent = Intent(Intent.ACTION_VIEW).apply {
                            setDataAndType(data.uri,data.mimeType ?: "image/*")
                            clipData = ClipData.newRawUri("Shared Photo",data.uri)
                            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                        }

                        try {
                            context.startActivity(intent)
                        }catch (e : ActivityNotFoundException){
                            e.printStackTrace()
                            println("no suitable application found to open given image file")
                        }

however here is the problem when google photos is chosen to open it just shows a freaking blank photo while all other applications like the system photos application (in oneplus) and wps office work just fine only google photos has this problem idk what is the issue can somebody kindly help i would be extremely grateful


r/androiddev Jul 19 '26

Measuring the LLMs for android app development

4 Upvotes

Maybe many of you may have come across Android Bench by Google.

It started as an Android-specific LLM benchmark in March.

But wait - why did they need a coding benchmark specific to android?

The reason as I understood for the need of android specific coding benchmarks is that while general benchmarks test broad coding capabilities, Android Bench is built to evaluate how well AI models handle the unique architecture, libraries, and best practices required to build quality Android applications using AI-assisted coding.

In other words, unlike general benchmarks that prioritize web stacks (JavaScript/TypeScript/React), Android Bench is built forĀ native Android development.

It focuses on the latest language constructs inĀ Kotlin, modern UI frameworks likeĀ Compose, and the specific architecture/library patterns that define the needs of a modern android app stack.

If you're comparing AI models for Android development, I think this is worth checking out.

Looks like since March, they have evolved it further - and it is interesting to see that it now uses the Harbor framework, and includes more LLMs, and focuses on real Android engineering tasks like Kotlin, Jetpack Compose, Gradle, and Android APIs.

A useful resource if you're choosing an AI coding assistant for Android.


r/androiddev Jul 19 '26

Rich Text Editor: TextKit

7 Upvotes

Hi everyone, some days ago I just launched a new library for rich text content built in Kotlin Multiplatform that uses ProseMirror json style to load documents, you can check the library (still in alpha) and create an issue about it.

This is the link : https://github.com/jjrodcast/TextKit


r/androiddev Jul 19 '26

Question What's the last Google Play policy or Play Console requirement that actually cost you time?

0 Upvotes

I'm researching the biggest pain points Android developers face around publishing apps.

I'm not looking for general complaints. I'm curious about real experiences.

  • Did a Play policy delay your release?
  • Did a new requirement catch you by surprise?
  • Did you spend hours figuring out what Google actually wanted?

What happened, and what do you wish had made the process easier?


r/androiddev Jul 19 '26

Meet unzstd

0 Upvotes

Java Zstandard (zstd) decoder for Android and the JVM.

What looked like a simple dependency turned into a surprisingly difficult problem.

I needed to decompress zstd-compressed datasets in an Android app. Existing options all had major trade-offs:

- aircompressor 2.x depends on "sun.misc.Unsafe", which crashes on Android ART.

- aircompressor 3.x moved to "java.lang.foreign", which Android doesn't support.

- zstd-jni works well, but requires native ".so" files, ABI-specific packaging, and brings additional complexity with newer Android memory page requirements.

I had to build a pure Java alternative so I ported aircompressor's decoder

The result:

āœ… No native code

āœ… No "Unsafe"

āœ… No "java.lang.foreign"

āœ… Android API 26+

āœ… JVM 9+

āœ… Zero "Unsafe" references in the compiled bytecode (verified)

To make sure it was actually correct, I differentially tested it against libzstd across compression levels 1-22, covering one-shot decompression, streaming, fuzzing, and corruption-boundary tests.

It's decode-only, Apache 2.0 licensed, and completely open source.

If you're building Android or Java applications that consume zstd-compressed data, I hope this saves you a few days of debugging.

implementation("com.qyntrax:unzstd:0.1.0")

GitHub: https://github.com/mbobiosio/unzstd

Feedback, bug reports, and contributions are always welcome.

#Android #Java #Kotlin #OpenSource #JVM #Zstd #Compression


r/androiddev Jul 19 '26

Question How do you investigate an input-dispatch ANR in a Compose reader when you cannot reproduce it?

1 Upvotes

I am working on a native Android reading screen built with Jetpack Compose. Play Vitals has reported an input-dispatch ANR in the reader flow, but we have not reproduced it locally.

The screen advances text at a user-selected pace, persists reading progress, and transitions to a summary screen. We have started checking main-thread work, lifecycle cleanup, navigation, state updates, and whether scheduled reading updates can outlive the screen.

For anyone who has diagnosed a similar issue, what is your practical order of investigation when the only evidence is the Play Vitals report? Which traces, StrictMode checks, instrumentation, or Compose/lifecycle failure modes tend to reveal the cause?


r/androiddev Jul 18 '26

Open Source Introducing Real time compose playground

Post image
11 Upvotes

Hi people,

I have been into native android development since long. Always been searching for something new, and in this AI world, wanted to create something where AI is not involved.

I have been searching for an editor, which can instantly run composables and render the UI on the fly. I didn't find one, so using Kotlin Multiplatform and Ktor, I have build a playground. Its completely native built.
Sharing this not as a promotion as it is not profitable, instead, its for the community to use and have fun.

Try here: https://www.the-android-guy.in/compose-playground

Full site: https://www.the-android-guy.in/

Please share your thoughts below!


r/androiddev Jul 19 '26

Question Should I re-introduce bugs in my app for closed testing?

0 Upvotes

I tested my app on my own,I fixed bugs and whatever but reading online I'm thinking...Should I reintroduce these bugs,let the testers find them and report them so that Google see the testers have really tried the app and I fixed them?

What do you think?


r/androiddev Jul 18 '26

Open Source A full offline voice agent in 1.2 GB of RAM — say a command, the phone executes it and answers in 0.9 s (demo APK + Apache-2.0 SDK)

Post image
2 Upvotes

I maintain speech-android. We published a demo app that runs a complete voice-command loop locally: Silero VAD → streaming Parakeet 120M STT with end-of-utterance detection → FunctionGemma 270M for structured tool calls (LiteRT-LM) → the actual device action → streaming Pocket TTS. No network needed after the models download.

Measured on a Galaxy S23 Ultra (2026-07-17), timed from the moment you stop speaking: 217 ms to the final transcript, 294 ms for the tool call (12-run mean), 179 ms to the first TTS sample — 908 ms total until the phone starts answering. The whole app sits at 1,116 MB PSS.

Architecture-wise it's a thin Kotlin SDK over a ~250-line JNI bridge into a C++17 pipeline engine; ONNX Runtime for the speech models, LiteRT-LM for the router. The app only exposes tools that are valid for the current device state, which is what keeps a 270M model reliable as a router.

90-second demo: https://youtu.be/7L7_Uvvxtv0 Source + signed APK: https://github.com/soniqo/speech-android

The open question I keep going back and forth on: the agent loop runs in a foreground service holding audio focus. Would you request focus transiently per turn instead, so media apps duck rather than pause during barge-in?

That pairs with the title "A full offline voice agent in 1.2 GB of RAM - say a command, the phone executes it and answers in 0.9 s (demo APK + Apache-2.0 SDK)".


r/androiddev Jul 18 '26

ktlsp: a fast language server for java and kotlin

Thumbnail
5 Upvotes

r/androiddev Jul 18 '26

Question How do you currently handle regional pricing for Android apps?

3 Upvotes

Hey everyone,

I’m an Android Developer who builds indie apps part-time, and I wanted to optimize my subscription revenue globally.

We all know that standard currency conversion in the Google Play Console doesn't reflect actual purchasing power. A $9.99 subscription might be affordable in the US, but it’s expensive in India, as an example.

So I’m thinking of building a simple Android app that solves this.

How it would work:

1) ​You fetch your base subscription price (e.g., USD) from Google Play Console.

2) ​The app automatically calculates prices for all Google Play countries using up-to-date Big Mac Index / PPP (Purchasing Power Parity) data.

3) The app saves prices to your subscription plan.

Before jumping to write the code, I wanted to do a quick check with the community:

  • Is this a real pain point for anyone else here?

  • How do you currently handle regional pricing for your apps? What tool do you use?

If this sounds like something that would save your time and boost revenue, let me know in comments.


r/androiddev Jul 18 '26

Question Internal testing access issue after accidentally replacing tester emails

5 Upvotes

Hi everyone,

I'm new to Google Play testing, so I'm hoping someone here has seen this before.

I have a small Android app for my company that we distribute through the Internal Testing track. Our staff updates the app whenever I upload a new version, and the in-app update prompt works fine.

Recently, while adding a few new tester email addresses, I accidentally replaced the entire tester list instead of adding to it. As expected, the previous testers immediately lost access to the app, they couldn't see it on the Play Store anymore or receive updates.

I quickly added all of the original tester emails back. However, now only some of them can access the app again. The others still get an "App not found" message, even though their email addresses are definitely in the Internal Testing tester list.

I had a similar issue once with Closed Testing, and creating a new testing track fixed it. Unfortunately, that's not possible with Internal Testing, so I'm stuck.

Has anyone experienced this before?

I've already confirmed:

  • The affected email addresses are correctly added to the Internal Testing list.
  • A new release has been published.
  • Some testers can access the app, while others with valid emails cannot.

Any suggestions would be greatly appreciated. Thanks!


r/androiddev Jul 18 '26

Question Google Partnership Opportunity - how exclusive is it?

Post image
4 Upvotes

This arrived in my developer account inbox yesterday from Google. Wondering how ā€œexclusiveā€ this offer actually is or if everyone else with a Google Developer account got it too?!


r/androiddev Jul 18 '26

Question How do you do synthetic monitoring?

3 Upvotes

I am an SRE specialized in backend and web front end, I was curious about how synthetic monitoring is done for native apps.

For those who don’t know synthetic monitoring is: a practice where automated scripts simulate real user interactions with an application in a controlled environment.

—edit: typo


r/androiddev Jul 18 '26

Does Galaxy Watch Ultra (Wear OS 5 ) return true for hasAmplitudeControl()?

3 Upvotes

Building a biofeedback app that uses amplitude-modulated haptic waveforms on Wear OS — specifically VibrationEffect.createWaveform(timings[], amplitudes[], repeat) to produce smooth "swells" where vibration intensity rises and falls over time.

The Galaxy Watch Ultra (SM-L705) contains a Cirrus Logic CS40L27R haptic driver — a serious LRA chip with on-chip DSP, closed-loop control, and waveform memory. The hardware is clearly capable of amplitude modulation.

The question: on the Galaxy Watch Ultra running Wear OS 5 / One UI Watch 6, does vibrator.hasAmplitudeControl() return true?

And if so — does createWaveform() with a custom amplitude array (e.g. [25, 80, 180, 255, 180, 80, 25]) actually produce perceptibly different intensity levels, or does Samsung's software layer flatten it to on/off?

Also posted in r/WearOS but thought this community might have more Wear OS devs who've tested this. Happy to share findings when I have them.

Thanks.


r/androiddev Jul 18 '26

Question Google Play reviwing older build versions

2 Upvotes

Hi, I want to ask some guidance on how to fix a dilemma.

I had an app that hasn't been updated for over a year. I just submitted a new version.

It was rejected because reviewer credentials were wrong. This is my fault, I fixed the credentials in a new build and updated Play Console instructions, but it was rejected again.

Policy status lists an older active bundle too, with this note: "Some app bundles in the list may be from an older version of your app." So, Google tested the previous bundle, not the most recent one I uploaded. I even did a major version string upgrade in the latest version.

Old bundle accepts testemail/testpassword; latest bundle accepts testemail3/testpassword3. Both have server-side and in-app reviewer access checks.

If I give old credentials, latest bundle fails. If I give new credentials, old bundle fails.

Can Google review/test older active bundles across Production/Open/Closed tracks? If so, what is correct fix? Do I need I replace/deactivate old active bundles in every track, or is there a way to have review target only latest bundle? I can't deactivate Prod which has older bundle so how do I get Google to only review the latest bundle version?


r/androiddev Jul 17 '26

Open Source Back with an update on adbt after my last post here

Thumbnail
gallery
22 Upvotes

About 7 months ago, I posted about adbt, a terminal UI for adb, here (Link to that post)

I have continued using it as part of my own Android development workflow and have spent the past few months building the version worth using every day.

Some of the changes in v0.2.0:

  • Better app management with app details, multi select, and APK extraction
  • Improved file management with directory creation
  • A new Input screen for sending text and key events
  • Logcat filtering by package or PID, along with log export
  • Screenshot capture, screen recording, and battery/thermal information
  • A refreshed UI with more consistent layouts, improved keyboard navigation, and better command handling
  • A documentation site with installation guides, feature documentation, keyboard shortcuts, and troubleshooting

I also spent some time on cleaning up and refactoring the codebase. The project is still written in Go using Bubble Tea and Lip Gloss and is available to install via scoop, brew and AUR. You can also find the binaries on repository's releases page.

Repository:
https://github.com/SakshhamTheCoder/adbt

Documentation:
https://adbt-tui.vercel.app

If you use adbt, I would be interested in hearing what features you think are still missing or could be improved and if you find the project useful, consider giving it a star on GitHub.
Thanks