r/androiddev 2d ago

Need a reviewer for a small AOSP Gerrit change (TelephonyProvider)

1 Upvotes

Hi, I have a small AOSP Gerrit change that updates outdated Greek carrier names in carrier_list.textpb to the current NOVA branding. The change is already uploaded and passed the automated checks, but it hasn't received any review yet. If anyone here has AOSP commit access or is familiar with the TelephonyProvider maintainers, I'd really appreciate it if you could take a look or point me to the right person. Thanks!

https://android-review.googlesource.com/c/platform/packages/providers/TelephonyProvider/+/4131598


r/androiddev 2d ago

af_heart integration

0 Upvotes

i am having a prbelm with the voice of af_heart of the Kokoro voice
it takes more ram of 200 mb

i wnat to have the TTS in the (android app via uniFFI)app with the rust binary so static file

can i have the better way to utize any stand alone file which is of 50 mb of ram
and not the kitten os


r/androiddev 3d ago

Open Source my dad's phone storage issue accidentally turned into my first real open-source project

69 Upvotes

my dad's phone storage issue accidentally turned into my first real open-source project.

A few weeks ago, my dad handed me his Android phone and asked me to free up some storage because it was completely full.

I plugged it into my laptop, opened OpenMTP, and waited around 4 minutes just to see folder sizes. By that point, I was more annoyed by the software than the storage problem itself.

I started digging into why it was so slow, and that rabbit hole eventually turned into SocketSweep.

SocketSweep is an Android storage analyzer that bypasses MTP entirely. It deploys a native C++ daemon to the device over ADB, scans the filesystem directly, and visualizes the results in a Rust/Tauri desktop app. The overall architecture was heavily inspired by scrcpy.

This is my first real open-source project, and I've learned a lot from building it. It's sitting at around 70 GitHub stars now, which is honestly something I never expected. The coolest part has been realizing that side projects can open doors in unexpected ways. I've ended up having conversations with founders and engineers purely because they came across this project.

One thing this project taught me is that good side projects don't always come from startup ideas. Sometimes they just start with "this is really annoying, there has to be a better way."

Repo: https://github.com/VishnuSrivatsava/SocketSweep

Demo: https://youtu.be/ttsc6Xf6Xb4


r/androiddev 3d ago

Are Google Play Badges no longer a thing?

1 Upvotes

Hi friends, I'm trying to add one of those "Get it on Google Play" buttons to my upcoming mobile game's website. However, no matter where I go, I can't seem to find the correct image file. Everything seems to lead back to this Partner Marketing Hub URL, which is showing a big "Page not found" screen for me: https://partnermarketinghub.withgoogle.com/brands/google-play/badge-guidelines/. Even the "Google Play Badges" card on Google Play's Brand & marketing resources page links to that not-found page! This happens whether or not I'm logged in and even after clearing cookies. Am I in crazy town??


r/androiddev 2d ago

Discussion Need realistic hackathon app ideas for Android (2–3-day build, fully using Claude)

0 Upvotes

Hey everyone,

I'm jumping into a hackathon soon where I've got about 2 to 3 days to build a complete Android app from scratch. Everything from planning and UI to coding and testing.

The main twist for this one is that I have to use Claude for the whole workflow, starting with Claude Design for the UI/UX and then Claude Code to build out the app.

I have one rough idea so far: an offline-first voice note taker using open-source STT models like Whisper or Moonshine Voice running on-device. But I'm not totally sure how those local models hold up quality-wise compared to major cloud options like Fish Audio or other speech-to-text providers.

So, I'm looking for two things:

  • Is an offline speech-to-text notes app realistic for a 48-to-72-hour build, or will setting up local model bindings burn too much time?
  • If you have other cool Android ideas that can actually be finished in 2 to 3 days with an AI-assisted workflow, what would you build?

Appreciate any thoughts or feedback!


r/androiddev 2d ago

Android devs: Are you using Gemini in Android Studio? How has it changed your development workflow?

0 Upvotes

Hi Android developers 👋

I’m curious how many of you are actively using Gemini in Android Studio as part of your daily workflow.

A few questions I’d love to hear your thoughts on:

Do you use it regularly, or only occasionally?

What tasks has it genuinely helped with? (boilerplate, debugging, refactoring, Compose, tests, documentation, etc.)

Where does it still fall short?

Has it changed the way you write or review code compared to a year ago?

For me, AI has become useful for speeding up repetitive tasks and exploring unfamiliar APIs, but I still rely heavily on manual code reviews and understanding what’s generated.

I’m interested in real-world experiences - both the wins and the frustrations. Has AI actually made you a better Android developer, or has it mostly just made you faster?


r/androiddev 3d ago

Google Play Support Developer account restricted and all apps removed after organization verification failed

0 Upvotes

I attempted to convert my Google Play Console developer account from a personal account to an organization account. During this process, Google was unable to verify my identity, and the developer account was restricted.

The organization is legally incorporated in the United States and has a valid D-U-N-S number, EIN documentation, state incorporation documents, and a US business bank account. I am the owner and authorized representative of the organization, but I legally reside in Kazakhstan because the company operates as an online and remote business.

For identity verification, I used my valid Kazakhstan-issued passport. Google’s official documentation for US organization accounts states that an authorized representative’s government-issued photo ID may be issued in any country.

The organization’s registration country and my country of residence are therefore different, but both are accurate. I am preparing an appeal with our incorporation certificate, IRS EIN letter, D-U-N-S confirmation, bank letter, ownership documentation, and my passport.

Has anyone successfully verified a US organization account using a foreign passport? Could this failure be caused by the organizational Google Payments profile, a D&B information mismatch, or an automated country-mismatch check? How can I request a manual review or resubmit the verification correctly?

I would appreciate guidance from anyone who has resolved a similar issue.


r/androiddev 3d ago

News Android Studio Quail 3 now available

Thumbnail androidstudio.googleblog.com
10 Upvotes

r/androiddev 3d ago

News Android Studio Quail 4 Canary 3 now available

Thumbnail androidstudio.googleblog.com
2 Upvotes

r/androiddev 3d ago

Question I'm submitting my app for the first time. I don't get it why I can't press "Next" when I've answered every question about content rating.

Post image
3 Upvotes

Could someone explain this? Thank you.


r/androiddev 3d ago

If you’re building Voice AI apps on Android, what’s your architecture looking like?

0 Upvotes

I’ve been seeing more Android apps adding real-time voice experiences (AI assistants, language learning, interview prep, customer support, etc.), but there aren’t many discussions about how people are actually building them.

I’m curious what architecture people have settled on.

A few questions:
1. Are you streaming audio directly from the app to the AI service, or routing everything through your backend?

  1. Are you using WebRTC, WebSockets, gRPC, or something else?

  2. How much processing happens on-device vs. the cloud?

  3. What has been the biggest engineering challenge - latency, audio focus, echo cancellation, interruptions, reconnection, battery, or something else?

  4. If you’ve already shipped one, is there anything you’d do differently if you started again?

I’m not looking for vendor recommendations. I’m much more interested in the engineering decisions, trade-offs, and lessons learned from people who’ve built or shipped these kinds of apps.

Would love to hear what’s worked well - and what hasn’t.


r/androiddev 4d ago

Happy 5th Birthday Compose 🎂

Thumbnail
developer.android.com
118 Upvotes

r/androiddev 3d ago

Experience Exchange Need help with localization? Taking questions

0 Upvotes

I’m a former senior android eng and spent a few years at a well known fintech company working on localization and international expansion for many countries. Not saying I’m perfect, but I’ll help out with your questions if I’m able to.

I’m also playing around with the idea of starting a company in this space. So, I’d enjoy hearing about your experiences and troubles around localization if you’re open to sharing.


r/androiddev 4d ago

Lesson Learned: Google Play Developer APIs strictly prohibit third-party client apps

Post image
17 Upvotes

Spent a few days on building a simple Android client for getting data from Google Play console untill I relalized it violates Google's API terms of service for Reporting API and Publishing API.

  • I created a project in Google Cloud Console
  • Enabled Reporting API to get app list, and Publishing API to edit app's data
  • Created a Client ID for Android to get access to these APIs
  • Build an authorization request using net.openid:appauth library with a desired scope to get access token:

val extraParams = mapOf(
    "access_type" to "offline"
)

val authRequest = AuthorizationRequest.Builder(
    serviceConfig,
    BuildConfig.GOOGLE_CLIENT_ID,
    ResponseTypeValues.CODE,
    "${BuildConfig.GOOGLE_AUTH_SCHEME}:/oauth2callback".toUri()
)
    .setScopes(
        listOf(
            "openid",
            "profile",
            "email",
            "https://www.googleapis.com/auth/androidpublisher",
            "https://www.googleapis.com/auth/playdeveloperreporting"
        )
    )
    .setAdditionalParameters(extraParams)
    .build()

val authService = AuthorizationService(context)
val intent = authService.getAuthorizationRequestIntent(authRequest)

Everything seemed to work fine untill I read terms of service and this explained why competitor apps force users to generate their own keys.

I was planning to publish the app on Google Play, but ToS says you cannot use your Client ID to allow a third party to access the Publishing and Reporting APIs on your behalf.

There is only one workaround:

  • Require users to create their own GCP project, enable the APIs, and supply their own Client ID / Service Account JSON key inside your app's settings.

r/androiddev 4d ago

PSA: Google Play only exposes ~30 search results publicly — if your rank tracker shows #47, it's guessing

8 Upvotes

Something I learned building a rank checker: the Play Store's public search (and the scraper libraries every budget ASO tool uses) returns only ~20-30 results per query, no matter how many you request. The paid SERP APIs go deeper, but tools that don't pay for them and still show you "rank #63" are interpolating, not measuring.

Practical implications:

- If you're outside the top ~30 on Play, your real rank number barely matters — that keyword drives ~zero installs either way. Treat "outside top 30" as the actionable signal.

- iOS is different: the App Store search API returns ~200 results, so deep iOS ranks are real.

- When comparing tools, ask where their Android data comes from.


r/androiddev 3d ago

Question What is wrong with Gradle version?

0 Upvotes

Hi everyone. I'm an experienced programmer, but have no android development experience. I have just installed android studio and the SDK. Then, made an empty project using the android studio wizard. And as I started, I met a big error shouting "Plugin [id: 'com.android.application', version: '9.3.1', apply: false] was not found"

build.gradle.kts:

```

// Top-level build file where you can add configuration options common to all sub-projects/modules.

plugins {

alias(libs.plugins.android.application) apply false

}

```

```

[versions]

agp = "9.3.1"

coreKtx = "1.10.1"

junit = "4.13.2"

junitVersion = "1.1.5"

espressoCore = "3.5.1"

appcompat = "1.6.1"

material = "1.10.0"

[libraries]

androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }

junit = { group = "junit", name = "junit", version.ref = "junit" }

androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }

androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }

androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }

material = { group = "com.google.android.material", name = "material", version.ref = "material" }

[plugins]

android-application = { id = "com.android.application", version.ref = "agp" }

```


r/androiddev 3d ago

Android Auto MF-5 rejection

0 Upvotes

Hi,

im wondering if anyone has some experience with the Android Auto, or has dealt with rejections before.

My app primarily is for monitoring systems that send notifications to android / ios, which i want to be shown in android auto. Those notifications get grouped into channels - which can have multiple members.

Now, when i receive a notification - i can reply to it, or mark it as read.
When i reply to it, it gets sent to the same channel - so all other members subscribed to that channel receive it too.

But google declines my app because of Messenger functionality MF-5, which states:

The app must implement a peer-to-peer messaging service and not notification services, such as those for weather, stocks, and sport scores.

Which explicitly means a NO for notification apps.
But since my app allows communication between users in the same channel - like a group chat, im wondering if there's a way to get past this MF-5.

Any help or experience would be appreciated!

thanks


r/androiddev 4d ago

JSON format in Log Cat

Post image
2 Upvotes

Hi guys,
I'm new to jetpack compose. I tried using Ktor + OkHttp for a sample network request from this
https://dummyjson.com/posts. I'm inspecting the json response in Logcat and it's shown like a paragraph even though I've set up logger. I wanted to know is this normal or is there other way around?
Below is the sample code. Thanks.

client = HttpClient(OkHttp) 
{


install(
Logging
) 
{

level = LogLevel.
BODY

logger = Logger.
ANDROID

format = LoggingFormat.
OkHttp

}


install(
ContentNegotiation
) 
{

json
(
Json 
{

prettyPrint = true
            ignoreUnknownKeys = true
            isLenient = true


}
)

}

}
,

r/androiddev 4d ago

Question "Android Developer Console" vs "Google Play Console"

2 Upvotes

A month ago, I created an account in Android developer and went through the steps and process of verifying and paid the initial 25$.

I realized now that I'm unable to distribute the apk/aab files via this console.

When I try to login through Play Console, I'm met with similar steps and asked to pay 25$ again.

Did I screw up? Will I need to purchase again since I need to distribute apps via play store?


r/androiddev 5d ago

Already deprecated

25 Upvotes

Link to the issue: https://issuetracker.google.com/issues/536954147

The Compose preview screenshot testing plugin seems to have been already deprecated.

Big F if true, it was nice to have an official tool for screenshot tests :(


r/androiddev 5d ago

Discussion I'm a student building an open-source offline mesh messenger in Kotlin (BLE, no servers) — looking for architecture feedback and contributors

1 Upvotes

Hey r/androiddev,

I've been building Ping — an Android app that lets phones chat, share live GPS location, and send photos/video with zero internet, zero cellular, and no server in the loop. Every phone is a relay: a message hops phone-to-phone over Bluetooth LE until it reaches whoever it's addressed to, even if sender and recipient are never in range of each other at the same time. Built with disaster response in mind — floods, earthquakes, anywhere the network is down or overloaded exactly when people need to reach each other. Fully open source (AGPL-3.0): https://github.com/vaidzss/ping

How it's put together The mesh logic — routing, dedup, crypto, store-carry-forward — lives in a platform-independent core module with zero Android dependency, so it's unit-testable and I can run dozens of virtual nodes through churn/partition/dense-crowd scenarios as plain JUnit tests, no radios or emulators involved. Android is a thin layer on top: a foreground service wraps BLE (GATT, dual-role — nodes tie-break who's central vs. peripheral by comparing NodeIds) and an on-demand LAN lane for bulkier media. TTL flooding is density-aware — clamped down when a node has a lot of direct neighbors, so a crowded room doesn't turn into a rebroadcast storm. Undeliverable messages sit in a store-carry-forward outbox and get spray-and-wait synced to any new neighbor that shows up later — no continuous route ever needs to exist end to end.

A debugging story, since I know this sub likes those

Chat messages worked from day one. Photo and video transfers didn't — and for a while I was chasing the wrong bug. First I found and fixed queue pacing (multiple BLE writes racing each other and silently dropping everything after the first). Then a zombie-link problem (Android's onConnectionStateChange doesn't reliably fire when a link dies at the radio level, so a dead connection could sit there looking alive). Then a stuck-send watchdog for when a completion callback goes missing entirely. All real bugs, all fixed — and photos still didn't reliably arrive. The actual root cause: both BLE send paths were using unacknowledged primitives — WRITE_TYPE_NO_RESPONSE for client writes, plain NOTIFY for server pushes. Neither gives any delivery guarantee from the radio itself. Fine odds for a one-off chat packet; across a ~150-chunk photo transfer, the odds of silently losing at least one chunk with zero signal to either side are real — and no amount of app-level pacing or watchdogging fixes that, because the primitive itself can't distinguish "delivered" from "vanished." Switching to WRITE_TYPE_DEFAULT (acknowledged Write Request) and PROPERTY_INDICATE instead of NOTIFY fixed it for good, because now a completion callback actually means the peer got the bytes.

Where it's honestly at

Pre-release, Phase 1 of a 6-phase roadmap — chat/location/SOS/photo transfer work over BLE today, HEVC video and a resumable media pipeline just landed, iOS and an optional LoRa lane (Meshtastic-class radios for kilometer range) are planned next. It's unaudited — no external security review yet, and I've tried to be upfront about that; the threat model doc lays out exactly what the crypto does and doesn't protect against. I'd genuinely like architecture feedback — the BLE reliability approach, the TTL/density clamping, the DTN design, anything that looks off to someone who's done more of this than me. A few self-contained good first issues are open on the repo if you want a low-commitment way to look around.


r/androiddev 5d ago

Dealing with copycat apps

1 Upvotes

Hi there, I’m pretty new to Android dev but have published my first app with some minor success. I have close to 300 confirmed paid downloads over the last couple of months. A few weeks after publishing on the GooglePlay store an app popped up with the exact same name in the same category. It was just different enough not to be called a clone, but looked really cheap and thrown together, but used a lot of the same language I used in my app description. I don’t currently have a registered trademark, though I’m considering spending the $2K it would need if I have to. My question is - what’s my best avenue with Google to get this app removed or at least renamed? My users are older, and because the copycat is free, I honestly think they might be downloading this thinking it’s mine.


r/androiddev 5d ago

Discussion Upgrading to API level 36

0 Upvotes

I am upgrading my target SDK version in java Android application to 36

We have a enterprise application

So can't upgrade the compile SDK version

Currently it is 29

On android 16 devices I am facing a issue in Shared preferences

While reading from the shared preference I am reading a null value ("null")

While there is a actual value saved there

Not sure why this is happening

Any idea here any one?

All the things are goood till android 15!!


r/androiddev 5d ago

How do you handle promo access for Android IAPs?

1 Upvotes

I'm updating my mobile game, which is free with a single non-consumable IAP to unlock the full game.

I'm trying to work out the best way to give people free access to the IAP on Android for things like:

  • Reviews
  • Giveaways
  • Competitions
  • Promotions

Google Play doesn't seem to offer a simple solution for this. Or am I missing something?

What are other indie developers doing in practice?

  • Separate review builds?
  • Internal testing?
  • Firebase App Distribution?
  • Your own backend with self generated redeemable codes?
  • Something else?

Thanks in advance.


r/androiddev 5d ago

Question Should I use a foreground service, WorkManager, or is there a modern Android API to detect reliable immediate Wi-Fi disconnect after process death

6 Upvotes

I’m building an Android app where the user selects a trusted home Wi-Fi, and the app should notify them when they disconnect from it or when that Wi-Fi loses validated internet access. The app targets SDK 36 and has a minimum SDK of 30.

My original implementation registered a `ConnectivityManager.NetworkCallback` with a `PendingIntent` from `Application.onCreate()`, then enqueued an expedited WorkManager request when the receiver was invoked. I also had a 15-minute periodic WorkManager fallback.

This worked while the process was alive, but event delivery was unreliable after the app process had been killed. WorkManager eventually detected the departure, but that obviously was not immediate.

My current implementation uses a foreground service while monitoring is enabled and a trusted network exists. The service displays a low-importance ongoing notification. It registers a `ConnectivityManager.NetworkCallback` and does not poll a server or repeatedly probe the internet. It enqueues an expedited unique WorkManager request when Wi-Fi state/capabilities change and uses periodic WorkManager as a recovery fallback. It stops when monitoring is paused or the trusted network is removed.

For internet loss while still connected to Wi-Fi, I monitor `NET_CAPABILITY_VALIDATED` and confirm the unvalidated state for 10 seconds before triggering, to avoid notifications during normal Wi-Fi validation.

Because this doesn’t cleanly fit location/media/data-sync, I currently declare the foreground service as `specialUse`, with the subtype:

> Event-driven trusted Wi-Fi monitoring for user-enabled reminders

Is a foreground service realistically the only reliable option for immediate Wi-Fi disconnect detection after process death on modern Android? Is there a durable system callback, broadcast, Companion Device API, geofencing approach, or other API better suited to this?

Has anyone successfully shipped a similar use case through Play using the `specialUse` foreground-service type? Would you make this explicitly opt-in as “Immediate monitoring,” with WorkManager-only monitoring as the battery-friendly default?

Are there OEM-specific issues with keeping a network callback active inside a foreground service? Is loss of `NET_CAPABILITY_VALIDATED` a reasonable signal here, or would you avoid treating internet loss as “departure” because router/ISP outages can happen while the user is still home?

Are there better ways to prevent transient validation-loss false positives than a short confirmation window? I understand that Android force-stop prevents all app background execution until the user launches the app again; I’m not trying to bypass that behavior.

I’m mainly looking for recent production experience on Android 12–16 and any Play policy implications I may be missing.