I couldn't get 256 Hz ECG to render smoothly over BLE, so I ended up writing a sweep renderer
Bit of a long one, sorry. I've been building a remote patient monitoring app and
spent way more time than I expected on what I assumed was the easy part: drawing
the waveforms.
The thing I didn't appreciate going in is that bedside monitors don't scroll.
They sweep — a head moves across the screen left to right, wiping the previous
pass as it goes, and wraps around. Every charting library I looked at models a
scrolling window instead. Which is fine, it's just not the same thing, and once
you've watched a real monitor for a while the scrolling version looks wrong in a
way that's hard to unsee.
The bigger issue was that MPAndroidChart redraws through main-thread
invalidate(). At 256 Hz that was fine in isolation and fell apart the moment the
rest of the app did anything. SciChart handles it properly but it's commercially
licensed and this needed to be open.
So: SurfaceView, lockHardwareCanvas(), drawing happens on the ticker thread. The
main thread does layout and lifecycle and is never in the draw path.
Honestly though, the drawing was the easy half. The part that ate my month was
BLE delivery. Samples don't arrive smoothly — you get nothing for 300ms and then
twenty at once, and occasionally the connection just goes away for a couple of
seconds. If you render on arrival you get freeze-then-jump, over and over, and it
looks broken even though no data was lost.
What I ended up with:
\- a leaky bucket that meters bursts out at the af
dumping them into one frame
\- a shared adaptive display delay, slew-limited,ll
the trace and multiple waveforms stay lined up with each other
\- flat-fill so the head keeps moving through a d at
the head when it comes back
\- a monotonic render clock, because out-of-orderace
and causing false wraps and it took me an embarrassingly long time to work out
why
The clock alignment is the bit I'm actually plea,
and delivery lateness can never be negative — so the minimum lateness you've
observed is your best estimate of the true offse NTP
does. Adopt it immediately when it improves, otherwise slew at 2ms/s so drift
gets tracked but jitter doesn't yank the timelino
actually knows NTP to tell me where this falls over.
There's also per-sweep dynamic Y-rescale (with noise gates and outlier holds, so
one artifact doesn't zoom the whole trace out) a
respiration and pleth.
Where it's at: v0.1.0, JitPack, Maven Central not done yet. MIT, no dependencies
beyond coroutines. One trace per view right now ace
is open as an issue and is the obvious next thing. The demo replays real captured
ECG/PPG/RESP data and has toggles for bursty delcan
see the smoothing doing something rather than take my word for it.
To be clear about what it isn't: no axes, no zoom, no pan, no annotations. If you
want a chart, MPAndroidChart is still the right
replace it. This is just the sweep primitive.
https://github.com/chaudhary-lakshay/sweepwave
Would genuinely like to be told what I've got wrong here, especially on the clock
side. [I have tried sciChart, but it's too costly\]
https://redd.it/1v3ylh9
@reddit_androiddev
Bit of a long one, sorry. I've been building a remote patient monitoring app and
spent way more time than I expected on what I assumed was the easy part: drawing
the waveforms.
The thing I didn't appreciate going in is that bedside monitors don't scroll.
They sweep — a head moves across the screen left to right, wiping the previous
pass as it goes, and wraps around. Every charting library I looked at models a
scrolling window instead. Which is fine, it's just not the same thing, and once
you've watched a real monitor for a while the scrolling version looks wrong in a
way that's hard to unsee.
The bigger issue was that MPAndroidChart redraws through main-thread
invalidate(). At 256 Hz that was fine in isolation and fell apart the moment the
rest of the app did anything. SciChart handles it properly but it's commercially
licensed and this needed to be open.
So: SurfaceView, lockHardwareCanvas(), drawing happens on the ticker thread. The
main thread does layout and lifecycle and is never in the draw path.
Honestly though, the drawing was the easy half. The part that ate my month was
BLE delivery. Samples don't arrive smoothly — you get nothing for 300ms and then
twenty at once, and occasionally the connection just goes away for a couple of
seconds. If you render on arrival you get freeze-then-jump, over and over, and it
looks broken even though no data was lost.
What I ended up with:
\- a leaky bucket that meters bursts out at the af
dumping them into one frame
\- a shared adaptive display delay, slew-limited,ll
the trace and multiple waveforms stay lined up with each other
\- flat-fill so the head keeps moving through a d at
the head when it comes back
\- a monotonic render clock, because out-of-orderace
and causing false wraps and it took me an embarrassingly long time to work out
why
The clock alignment is the bit I'm actually plea,
and delivery lateness can never be negative — so the minimum lateness you've
observed is your best estimate of the true offse NTP
does. Adopt it immediately when it improves, otherwise slew at 2ms/s so drift
gets tracked but jitter doesn't yank the timelino
actually knows NTP to tell me where this falls over.
There's also per-sweep dynamic Y-rescale (with noise gates and outlier holds, so
one artifact doesn't zoom the whole trace out) a
respiration and pleth.
Where it's at: v0.1.0, JitPack, Maven Central not done yet. MIT, no dependencies
beyond coroutines. One trace per view right now ace
is open as an issue and is the obvious next thing. The demo replays real captured
ECG/PPG/RESP data and has toggles for bursty delcan
see the smoothing doing something rather than take my word for it.
To be clear about what it isn't: no axes, no zoom, no pan, no annotations. If you
want a chart, MPAndroidChart is still the right
replace it. This is just the sweep primitive.
https://github.com/chaudhary-lakshay/sweepwave
Would genuinely like to be told what I've got wrong here, especially on the clock
side. [I have tried sciChart, but it's too costly\]
https://redd.it/1v3ylh9
@reddit_androiddev
GitHub
GitHub - chaudhary-lakshay/sweepwave: Bedside-monitor-style real-time sweep waveform renderer for Android — off-main-thread, zero…
Bedside-monitor-style real-time sweep waveform renderer for Android — off-main-thread, zero-dependency ECG/PPG/RESP charts that never stutter through BLE bursts and dropouts - chaudhary-lakshay/swe...
Google requires Play Billing Library 8 by Aug 31 2026, but android-browser-helper (TWA) is still on 7.1.1. How are other TWA devs handling this?
I got the standard Play Console warnings on my TWA (a Bubblewrap-generated Trusted Web Activity):
1. Must target Android 16 (API 36) by Aug 31, 2026
2. Must use Google Play Billing Library 8.0.0+ by Aug 31, 2026
The target SDK one is trivial - one line in the app build.gradle (targetSdkVersion 36), compiles fine.
The billing one is the problem, and it seems to be on Google's side, not mine. My TWA doesn't call the Billing Library directly. It uses the Digital Goods API + PaymentRequest (https://play.google.com/billing), which is bridged by com.google.androidbrowserhelper:billing. That bridge is what actually embeds the Play Billing Library.
I checked the source, and the bridge is still on Billing 7:
\- Latest billing release is billing-1.1.0 (June 25, 2025), which explicitly says "BillingClient library updated to 7.1.1".
\- The main-branch version catalog (gradle/libs.versions.toml) still declares billing = "7.1.1".
So Google is warning every TWA to move to Billing 8, but Google's own TWA billing library hasn't been updated to 8 (it's been sitting on 7.1.1 for over a year).
Force-overriding com.android.billingclient:billing:8.x on top of the old bridge looks risky - Billing 8 removed deprecated APIs the old bridge relies on, and I've seen reports of queryProductDetails() silently breaking after the v8 jump on native/Flutter setups. Not something I want to ship blind on a live payment flow.
Questions for anyone in the same boat:
\- Is there any known timeline for android-browser-helper billing to move to Billing 8?
\- Has anyone successfully forced Billing 8 into a TWA and confirmed purchases still work end to end?
\- Are you just requesting the extension to Nov 1, 2026 and waiting?
For now I've requested the extension in Play Console (reason: "waiting on a new SDK version from an SDK provider"). Curious what everyone else is doing.
https://redd.it/1v39g1t
@reddit_androiddev
I got the standard Play Console warnings on my TWA (a Bubblewrap-generated Trusted Web Activity):
1. Must target Android 16 (API 36) by Aug 31, 2026
2. Must use Google Play Billing Library 8.0.0+ by Aug 31, 2026
The target SDK one is trivial - one line in the app build.gradle (targetSdkVersion 36), compiles fine.
The billing one is the problem, and it seems to be on Google's side, not mine. My TWA doesn't call the Billing Library directly. It uses the Digital Goods API + PaymentRequest (https://play.google.com/billing), which is bridged by com.google.androidbrowserhelper:billing. That bridge is what actually embeds the Play Billing Library.
I checked the source, and the bridge is still on Billing 7:
\- Latest billing release is billing-1.1.0 (June 25, 2025), which explicitly says "BillingClient library updated to 7.1.1".
\- The main-branch version catalog (gradle/libs.versions.toml) still declares billing = "7.1.1".
So Google is warning every TWA to move to Billing 8, but Google's own TWA billing library hasn't been updated to 8 (it's been sitting on 7.1.1 for over a year).
Force-overriding com.android.billingclient:billing:8.x on top of the old bridge looks risky - Billing 8 removed deprecated APIs the old bridge relies on, and I've seen reports of queryProductDetails() silently breaking after the v8 jump on native/Flutter setups. Not something I want to ship blind on a live payment flow.
Questions for anyone in the same boat:
\- Is there any known timeline for android-browser-helper billing to move to Billing 8?
\- Has anyone successfully forced Billing 8 into a TWA and confirmed purchases still work end to end?
\- Are you just requesting the extension to Nov 1, 2026 and waiting?
For now I've requested the extension in Play Console (reason: "waiting on a new SDK version from an SDK provider"). Curious what everyone else is doing.
https://redd.it/1v39g1t
@reddit_androiddev
Replacing an unreliable touch-target-size rule in my Jetpack Compose accessibility scanner
I have published version 2.0.0 of Compose A11y Scanner.
I found that detecting visually undersized touch targets from the Compose semantics tree was unreliable because Compose may expose expanded touch bounds. This meant the existing
I’ve replaced it with
Breaking changes:
Removed `touch-target-size`
Removed its related model/configuration fields
Added `touch-target-overlap`
Explicit rule allowlists must use the new ID
I have treated this as a major release because it changes both the public API and rule semantics.
Does checking effective target overlap seem like the more useful runtime signal for Compose? I’d also appreciate feedback on edge cases such as nested clickables and merged semantics.
GitHub: https://github.com/mohdaquib/ComposeA11yScanner
Contributions, issues, and constructive feedback are welcome.
Overlay Issue Demo
https://redd.it/1v421wi
@reddit_androiddev
I have published version 2.0.0 of Compose A11y Scanner.
I found that detecting visually undersized touch targets from the Compose semantics tree was unreliable because Compose may expose expanded touch bounds. This meant the existing
touch-target-size rule could miss expected cases or produce confusing results.I’ve replaced it with
touch-target-overlap, which checks whether the effective bounds of interactive elements intersect.Breaking changes:
Removed `touch-target-size`
Removed its related model/configuration fields
Added `touch-target-overlap`
Explicit rule allowlists must use the new ID
I have treated this as a major release because it changes both the public API and rule semantics.
Does checking effective target overlap seem like the more useful runtime signal for Compose? I’d also appreciate feedback on edge cases such as nested clickables and merged semantics.
GitHub: https://github.com/mohdaquib/ComposeA11yScanner
Contributions, issues, and constructive feedback are welcome.
Overlay Issue Demo
#AndroidDev #Kotlin #JetpackCompose #Accessibility #WCAG #OpenSourcehttps://redd.it/1v421wi
@reddit_androiddev
GitHub
GitHub - mohdaquib/ComposeA11yScanner: Runtime accessibility scanner for Jetpack Compose — detects missing content descriptions…
Runtime accessibility scanner for Jetpack Compose — detects missing content descriptions, low contrast, and touch target issues. - mohdaquib/ComposeA11yScanner
Shipaton is back! And r/androiddev is an official Build-in-Public community
Hey everyone,
RevenueCat is bringing back **Shipaton**, its annual mobile app hackathon, and r/androiddev **is joining as an official Build-in-Public community**.
The premise is straightforward: build a new app, ship it during the hackathon window, and share what you’re working on along the way.
The key requirement is that you must ship a brand-new app between **August 1 through September 30, 2026** to participate.
You can learn more and enter here: [**shipaton.com**](https://shipaton.com)
# What is Shipaton?
Shipaton is a mobile app hackathon built around one simple goal: getting people to actually ship.
It’s for Android developers, indie app builders, and anyone who has had an app idea sitting in their notes app for too long.
You’ll have two months to build and submit a new app. Along the way, participants can share progress, ask for feedback, and get help from other builders.
Participants will get access to the **Ship Kit**, which includes **credits, tools and discounts** to help you build faster, and will be able to compete for **over $1,000,000 in prizes**, including cash, funding opportunities, Billboards in Times Square, and more.
# Why r/androiddev?
Because building and shipping Android apps comes with a lot of very specific questions:
* Is this architecture going to hold up?
* Am I overcomplicating the stack?
* Is this UX clear enough?
* What should I cut so I can actually ship?
During Shipaton, this subreddit will be a place for Android builders to share progress, ask questions, and get feedback, before the submission deadline.
# What will happen here?
We’re planning a few Shipaton-related threads during the event:
* A launch / announcement thread
* A **“What are you building?”** check-in thread
* A **final-push feedback thread** closer to the submission deadline
* An upcoming **AMA with Jaewoong (u/SkyDoves) from RevenueCat**, where you can ask questions about your Shipaton project, RevenueCat, implementation details, or anything else you’re trying to figure out
# What should you post?
You don’t need a polished demo or a launch-ready app to participate. Early, messy updates are welcome.
Requirement: on r/AndroidDev we’ll only be accepting posts and comments regarding native Android Apps or Kotlin Multiplatform Apps.
A good Shipaton post might include:
* What you’re building
* Who it’s for
* What stack you’re using
* What you’re stuck on
* What kind of feedback would actually help
Screenshots, demos, prototypes, architecture questions, monetization questions, and “is this a terrible idea?” posts are all fair game, as long as they have the Shipaton flair and follow the other subreddit rules.
# How to enter
You can enter Shipaton at: [**shipaton.com**](https://shipaton.com)
Keep an eye out for the Shipaton threads here in r/androiddev. Happy shipping!
https://redd.it/1v4387g
@reddit_androiddev
Hey everyone,
RevenueCat is bringing back **Shipaton**, its annual mobile app hackathon, and r/androiddev **is joining as an official Build-in-Public community**.
The premise is straightforward: build a new app, ship it during the hackathon window, and share what you’re working on along the way.
The key requirement is that you must ship a brand-new app between **August 1 through September 30, 2026** to participate.
You can learn more and enter here: [**shipaton.com**](https://shipaton.com)
# What is Shipaton?
Shipaton is a mobile app hackathon built around one simple goal: getting people to actually ship.
It’s for Android developers, indie app builders, and anyone who has had an app idea sitting in their notes app for too long.
You’ll have two months to build and submit a new app. Along the way, participants can share progress, ask for feedback, and get help from other builders.
Participants will get access to the **Ship Kit**, which includes **credits, tools and discounts** to help you build faster, and will be able to compete for **over $1,000,000 in prizes**, including cash, funding opportunities, Billboards in Times Square, and more.
# Why r/androiddev?
Because building and shipping Android apps comes with a lot of very specific questions:
* Is this architecture going to hold up?
* Am I overcomplicating the stack?
* Is this UX clear enough?
* What should I cut so I can actually ship?
During Shipaton, this subreddit will be a place for Android builders to share progress, ask questions, and get feedback, before the submission deadline.
# What will happen here?
We’re planning a few Shipaton-related threads during the event:
* A launch / announcement thread
* A **“What are you building?”** check-in thread
* A **final-push feedback thread** closer to the submission deadline
* An upcoming **AMA with Jaewoong (u/SkyDoves) from RevenueCat**, where you can ask questions about your Shipaton project, RevenueCat, implementation details, or anything else you’re trying to figure out
# What should you post?
You don’t need a polished demo or a launch-ready app to participate. Early, messy updates are welcome.
Requirement: on r/AndroidDev we’ll only be accepting posts and comments regarding native Android Apps or Kotlin Multiplatform Apps.
A good Shipaton post might include:
* What you’re building
* Who it’s for
* What stack you’re using
* What you’re stuck on
* What kind of feedback would actually help
Screenshots, demos, prototypes, architecture questions, monetization questions, and “is this a terrible idea?” posts are all fair game, as long as they have the Shipaton flair and follow the other subreddit rules.
# How to enter
You can enter Shipaton at: [**shipaton.com**](https://shipaton.com)
Keep an eye out for the Shipaton threads here in r/androiddev. Happy shipping!
https://redd.it/1v4387g
@reddit_androiddev
Shipaton 2026
RevenueCat's global hackathon for builders shipping real apps to real stores.
عندي تطبيق عاوز ابيعه
التطبيق دا بيعمل ديجيتال منيو بيكون سهل التحكم من المحلات انهم يعدلو منيوهات او اسعارهم او عروضهم في اي وقت وبيبقي لكل محل qr خاض بيه معانا دلوقتي حوالي ١٥ عميل ما بين مطاعم وكافيهات والتطبيق مرفوع على جوجل بلاي وابل ستور وفي موقع وداش بورد وأدمن بانل
عاوز ابيع التطبيق بالموقع بالدومين بالصفحات بتاعة السوشيال ميديا كله على بعضه ب٢٠٠ الف احنا اصلا صرفنا عليه اكتر من كدا بس حاليا محتاجين نبيعه
https://redd.it/1v44kr5
@reddit_androiddev
التطبيق دا بيعمل ديجيتال منيو بيكون سهل التحكم من المحلات انهم يعدلو منيوهات او اسعارهم او عروضهم في اي وقت وبيبقي لكل محل qr خاض بيه معانا دلوقتي حوالي ١٥ عميل ما بين مطاعم وكافيهات والتطبيق مرفوع على جوجل بلاي وابل ستور وفي موقع وداش بورد وأدمن بانل
عاوز ابيع التطبيق بالموقع بالدومين بالصفحات بتاعة السوشيال ميديا كله على بعضه ب٢٠٠ الف احنا اصلا صرفنا عليه اكتر من كدا بس حاليا محتاجين نبيعه
https://redd.it/1v44kr5
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Come on guys
Ok my rant and only to devs, my emails and subreddit to others much different, I respect you guys but why are we only providing what the company wants? That's going to drive the biggest company in the world into the ground slowly. The only race is for what the consumer truly wants and it's going away from that. Express your voice like I have mine and let us have true freedom with our phones. We never asked for $1000 phones, we have been told we need them. And ok I'm paying on my $1000 phone but " sorry still can't do what you need because of my restrictions. Only restriction should be my ability to figure things out. Android became popular because it was based on Linux and let developers have true freedom. Now it's just an iPhone with a mask
https://redd.it/1v484t2
@reddit_androiddev
Ok my rant and only to devs, my emails and subreddit to others much different, I respect you guys but why are we only providing what the company wants? That's going to drive the biggest company in the world into the ground slowly. The only race is for what the consumer truly wants and it's going away from that. Express your voice like I have mine and let us have true freedom with our phones. We never asked for $1000 phones, we have been told we need them. And ok I'm paying on my $1000 phone but " sorry still can't do what you need because of my restrictions. Only restriction should be my ability to figure things out. Android became popular because it was based on Linux and let developers have true freedom. Now it's just an iPhone with a mask
https://redd.it/1v484t2
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
I'm in closed testing and my update is stuck in review for 7 days now
It's the "12 testers 14 days testing" and I have a few questions about this...
1. Does this happen randomly or does something trigger it? Google under heavy load?
2. Tomorrow my 14 days are done and I have not been able to publish a single update because I was foolish to cancel my previous update after 6 days. Should I apply for production tomorrow or wait until the update is live? I'm thinking it might look like I didn't act on any feedback...
https://redd.it/1v4ag7h
@reddit_androiddev
It's the "12 testers 14 days testing" and I have a few questions about this...
1. Does this happen randomly or does something trigger it? Google under heavy load?
2. Tomorrow my 14 days are done and I have not been able to publish a single update because I was foolish to cancel my previous update after 6 days. Should I apply for production tomorrow or wait until the update is live? I'm thinking it might look like I didn't act on any feedback...
https://redd.it/1v4ag7h
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Do paid Meta ads work?
As any indie developer surely knows, marketing is incredibly boring and tedious...
I’m just starting out with promoting and raising awareness for an android app, and I have some doubts about paid ads—do they actually work, or are they a waste of money? Do you know of any better or more efficient channels?
The more help and recommendations, the better; nothing beats the experiences of other indie developers.
https://redd.it/1v4aws7
@reddit_androiddev
As any indie developer surely knows, marketing is incredibly boring and tedious...
I’m just starting out with promoting and raising awareness for an android app, and I have some doubts about paid ads—do they actually work, or are they a waste of money? Do you know of any better or more efficient channels?
The more help and recommendations, the better; nothing beats the experiences of other indie developers.
https://redd.it/1v4aws7
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Cuttlefish AAOS: zero sound reaches host/browser even from stock apps
Running a Cuttlefish Android Automotive OS instance (
Mic input works fine after enabling the sidebar mic toggle in the WebRTC client.
Audio output does not: no sound reaches the browser, even from the stock "Local Media Player" app playing local files.
i need to get the audio output to work , anyone know how?
https://redd.it/1v49n8f
@reddit_androiddev
Running a Cuttlefish Android Automotive OS instance (
launch_cvd --enable_audio=true --start_webrtc_sig_server=true ...), accessed via the WebRTC web client.Mic input works fine after enabling the sidebar mic toggle in the WebRTC client.
Audio output does not: no sound reaches the browser, even from the stock "Local Media Player" app playing local files.
i need to get the audio output to work , anyone know how?
https://redd.it/1v49n8f
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Low weight vehicle animation on Android?
I want to build a custom launcher for my car (its android automotive based and I already figured out how to side load etc..). So the goal is to get something that looks a bit like Tesla. I have an MG4 with these specs:
Resolution: 1920×720px
Screen size: 10.25"
DPI: 160
MediaTek MT2712 SoC
I know that just throwing a 3d model in won't work so I had the idea of using some sort of pre rendert animations. Probleme is that I have zero experience in this 3d stuff and don't really know where to start.
Has anyone done something like this before and has an approach/idea?
Just to be clear I don't need a fully responsive model that can spin via touch like Tesla - its really just some pre rendert animations.. I already have a 3d model of the MG4: https://sketchfab.com/3d-models/2025-mg-mg4-glbmgmotorcommx-e7b2b544e638489f9440698f75b5a734
https://redd.it/1v49l0x
@reddit_androiddev
I want to build a custom launcher for my car (its android automotive based and I already figured out how to side load etc..). So the goal is to get something that looks a bit like Tesla. I have an MG4 with these specs:
Resolution: 1920×720px
Screen size: 10.25"
DPI: 160
MediaTek MT2712 SoC
I know that just throwing a 3d model in won't work so I had the idea of using some sort of pre rendert animations. Probleme is that I have zero experience in this 3d stuff and don't really know where to start.
Has anyone done something like this before and has an approach/idea?
Just to be clear I don't need a fully responsive model that can spin via touch like Tesla - its really just some pre rendert animations.. I already have a 3d model of the MG4: https://sketchfab.com/3d-models/2025-mg-mg4-glbmgmotorcommx-e7b2b544e638489f9440698f75b5a734
https://redd.it/1v49l0x
@reddit_androiddev
Sketchfab
2025 MG MG4 (GLB)(mgmotor.com.mx) - Download Free 3D model by MattDoesBlender
Automotive model - 2025 MG MG4 (GLB)(mgmotor.com.mx) - 2025 MG MG4 (GLB)(mgmotor.com.mx) - Download Free 3D model by MattDoesBlender
Google Play Support wants me to migrate 6 live apps & abandon trapped payouts over a Merchant Profile mismatch (Ticket # 3-6692000041443)
TL;DR: My Play Console is a Personal account, but the linked Merchant Payments Profile was set up as an "Organisation" under my brand name, which is not a legal entity). I have 6 live apps and earnings trapped in payout. Support stated that profile types cannot be changed once created, but also stated in the same email that it can be changed with documentation, before providing instructions on how to set up an Organisation profile when I explicitly requested an Individual profile. Support now requests that I open a new account and migrate all 6 apps.
# Official Google Support Thread:
[https://support.google.com/googleplay/android-developer/thread/453880070/contradictory-support-forced-to-abandon-developer-account-over-org-individual-mismatch](https://support.google.com/googleplay/android-developer/thread/453880070/contradictory-support-forced-to-abandon-developer-account-over-org-individual-mismatch)
# Overview of the Issue
* Account Setup: Personal Google Play Developer Account.
* The Mismatch: Associated Merchant Payments Profile was designated as Organisation under my developer brand.
* Verification Constraint: As an individual developer, I use a public brand name, not a registered legal business or corporate entity. As a result, the profile cannot pass Organisation identity verification, resulting in unpaid accrued earnings currently held.
* Portfolio: The account hosts 6 active, published applications.
# Support Communications & Contradictions
I contacted Google Payments Merchant Support to request an administrative update to align the merchant profile to Individual status. Support Agent Alvin John provided the following response:
1. Contradiction #1: Stated that "once the payments profile has been completely set up, some important settings cannot be changed and that includes the account profile type". In the same paragraph, he stated: "If you have all the documentation with you that indicates that you are an Organization then there will be no issue with changing the account type".
2. Contradiction #2: After I requested guidance on changing an Organisation profile to an Individual profile, the response provided a 6-step guide detailing how to "set it to Organization".
# Proposed Resolution from Google Support
To address this mismatch, Google Support has advised me to:
* Create a new Google Account and Play Developer Console.
* Pay a second $25 registration fee (with a refund request possible after setup).
* Re-complete identity and payment verification.
* Transfer all 6 live applications to the new account.
* Leave the existing account open indefinitely to receive outstanding payouts — despite the earnings balance being unreleased due to the Organisation verification restriction.
# Questions / Call for Advice
* Has anyone successfully requested an internal correction for a Merchant Profile type mismatch without transferring an active multi-app portfolio to a new Console account?
* Is there an established escalation path to reach a Payments Team representative who can review profile configurations for active developer accounts?
https://redd.it/1v4e5p3
@reddit_androiddev
TL;DR: My Play Console is a Personal account, but the linked Merchant Payments Profile was set up as an "Organisation" under my brand name, which is not a legal entity). I have 6 live apps and earnings trapped in payout. Support stated that profile types cannot be changed once created, but also stated in the same email that it can be changed with documentation, before providing instructions on how to set up an Organisation profile when I explicitly requested an Individual profile. Support now requests that I open a new account and migrate all 6 apps.
# Official Google Support Thread:
[https://support.google.com/googleplay/android-developer/thread/453880070/contradictory-support-forced-to-abandon-developer-account-over-org-individual-mismatch](https://support.google.com/googleplay/android-developer/thread/453880070/contradictory-support-forced-to-abandon-developer-account-over-org-individual-mismatch)
# Overview of the Issue
* Account Setup: Personal Google Play Developer Account.
* The Mismatch: Associated Merchant Payments Profile was designated as Organisation under my developer brand.
* Verification Constraint: As an individual developer, I use a public brand name, not a registered legal business or corporate entity. As a result, the profile cannot pass Organisation identity verification, resulting in unpaid accrued earnings currently held.
* Portfolio: The account hosts 6 active, published applications.
# Support Communications & Contradictions
I contacted Google Payments Merchant Support to request an administrative update to align the merchant profile to Individual status. Support Agent Alvin John provided the following response:
1. Contradiction #1: Stated that "once the payments profile has been completely set up, some important settings cannot be changed and that includes the account profile type". In the same paragraph, he stated: "If you have all the documentation with you that indicates that you are an Organization then there will be no issue with changing the account type".
2. Contradiction #2: After I requested guidance on changing an Organisation profile to an Individual profile, the response provided a 6-step guide detailing how to "set it to Organization".
# Proposed Resolution from Google Support
To address this mismatch, Google Support has advised me to:
* Create a new Google Account and Play Developer Console.
* Pay a second $25 registration fee (with a refund request possible after setup).
* Re-complete identity and payment verification.
* Transfer all 6 live applications to the new account.
* Leave the existing account open indefinitely to receive outstanding payouts — despite the earnings balance being unreleased due to the Organisation verification restriction.
# Questions / Call for Advice
* Has anyone successfully requested an internal correction for a Merchant Profile type mismatch without transferring an active multi-app portfolio to a new Console account?
* Is there an established escalation path to reach a Payments Team representative who can review profile configurations for active developer accounts?
https://redd.it/1v4e5p3
@reddit_androiddev
What do you guys do while gradle build??
Well I cloned an open source repo i wanted to contribute to and its fairly big project i would say (https://github.com/wikimedia/apps-android-wikipedia)
and as im writing this post it's already 15mins the gradle is building...
What do you usually do while Gradle is building??
https://redd.it/1v4gx81
@reddit_androiddev
Well I cloned an open source repo i wanted to contribute to and its fairly big project i would say (https://github.com/wikimedia/apps-android-wikipedia)
and as im writing this post it's already 15mins the gradle is building...
What do you usually do while Gradle is building??
https://redd.it/1v4gx81
@reddit_androiddev
GitHub
GitHub - wikimedia/apps-android-wikipedia: 📱The official Wikipedia app for Android!
📱The official Wikipedia app for Android! Contribute to wikimedia/apps-android-wikipedia development by creating an account on GitHub.
What is the official way to determine if an Android API level is still in preview?
Disclaimer: used llm to draft the post, but i have provided the pointers, and done the research before drafting.
Running into some confusing documentation/tooling discrepancies regarding Android platform release statuses and looking for clarification on the standard procedure.
Current Situation:
Android 17 documentation lists it as officially released, but navigating to individual version pages shows a preview icon on the sidebar with no explicit text status on the main page.
API Levels tracks it as currently in beta.
Android Studio SDK Manager shows versions like 37.0 and 37.1 available for download.
Question:
What is the definitive, official source of truth or programmatic check to determine whether a given Android SDK/API level has exited preview status and is fully stable?
https://redd.it/1v4i8w4
@reddit_androiddev
Disclaimer: used llm to draft the post, but i have provided the pointers, and done the research before drafting.
Running into some confusing documentation/tooling discrepancies regarding Android platform release statuses and looking for clarification on the standard procedure.
Current Situation:
Android 17 documentation lists it as officially released, but navigating to individual version pages shows a preview icon on the sidebar with no explicit text status on the main page.
API Levels tracks it as currently in beta.
Android Studio SDK Manager shows versions like 37.0 and 37.1 available for download.
Question:
What is the definitive, official source of truth or programmatic check to determine whether a given Android SDK/API level has exited preview status and is fully stable?
https://redd.it/1v4i8w4
@reddit_androiddev
Android Developers
Android 17 is now available. Try it today!
Account terminated for "high risk or abuse" — help me figure out what I did wrong
Official forum thread: [https://support.google.com/googleplay/android-developer/thread/453914381/account-terminated-for-high-risk-or-abuse-%E2%80%94-no-specific-violation-ever-cited-requesting-help?hl=en&sjid=16862522153865472926-EU](https://support.google.com/googleplay/android-developer/thread/453914381/account-terminated-for-high-risk-or-abuse-%E2%80%94-no-specific-violation-ever-cited-requesting-help?hl=en&sjid=16862522153865472926-EU)
Timeline:
* **Aug 2025:** Developer account terminated citing "a pattern of high risk or abuse" (Section 8.3/10.3 DDA). My only published app: a simple currency-conversion widget. No data collection, no unusual SDKs, no monetization tricks. No specific violation was ever named.
* Appealed. Rejected with the standard template — "we can't share the reasons we've concluded that your account is at high risk."
* My mistake: with nothing actionable to fix, I resubmitted the app from my personal Gmail account. That account was then terminated for association. I understand why that looked like ban evasion — it wasn't intended that way, but I own it, and I've acknowledged it in my follow-up appeal.
* **July 2026:** Replied to the appeal asking for a human re-review and a statement of reasons under EU P2B Regulation Art. 4 / DSA Art. 17 (I'm based in the Netherlands). Also posted on the official developer forum (linked above).
Facts about my setup: no VPN ever used with Play Console, only my own devices, no one else ever had access. The only association I can identify is that my phone number is also linked to my personal Google account — the one I later used for the resubmission. To my knowledge my payment method, address, and number were never used on any other developer account.
What I'm trying to figure out:
* What typically triggers the original "high risk" flag when there's no prior banned account you know of? Recycled phone numbers? Payment card false positives?
* Has anyone successfully overturned an association-based termination, and what specifically worked?
* Has anyone used the DSA Art. 21 out-of-court dispute route (e.g., Appeals Centre Europe) against Google Play, and did it produce an actual statement of reasons?
Happy to answer any questions in the comments.
https://redd.it/1v4gvcx
@reddit_androiddev
Official forum thread: [https://support.google.com/googleplay/android-developer/thread/453914381/account-terminated-for-high-risk-or-abuse-%E2%80%94-no-specific-violation-ever-cited-requesting-help?hl=en&sjid=16862522153865472926-EU](https://support.google.com/googleplay/android-developer/thread/453914381/account-terminated-for-high-risk-or-abuse-%E2%80%94-no-specific-violation-ever-cited-requesting-help?hl=en&sjid=16862522153865472926-EU)
Timeline:
* **Aug 2025:** Developer account terminated citing "a pattern of high risk or abuse" (Section 8.3/10.3 DDA). My only published app: a simple currency-conversion widget. No data collection, no unusual SDKs, no monetization tricks. No specific violation was ever named.
* Appealed. Rejected with the standard template — "we can't share the reasons we've concluded that your account is at high risk."
* My mistake: with nothing actionable to fix, I resubmitted the app from my personal Gmail account. That account was then terminated for association. I understand why that looked like ban evasion — it wasn't intended that way, but I own it, and I've acknowledged it in my follow-up appeal.
* **July 2026:** Replied to the appeal asking for a human re-review and a statement of reasons under EU P2B Regulation Art. 4 / DSA Art. 17 (I'm based in the Netherlands). Also posted on the official developer forum (linked above).
Facts about my setup: no VPN ever used with Play Console, only my own devices, no one else ever had access. The only association I can identify is that my phone number is also linked to my personal Google account — the one I later used for the resubmission. To my knowledge my payment method, address, and number were never used on any other developer account.
What I'm trying to figure out:
* What typically triggers the original "high risk" flag when there's no prior banned account you know of? Recycled phone numbers? Payment card false positives?
* Has anyone successfully overturned an association-based termination, and what specifically worked?
* Has anyone used the DSA Art. 21 out-of-court dispute route (e.g., Appeals Centre Europe) against Google Play, and did it produce an actual statement of reasons?
Happy to answer any questions in the comments.
https://redd.it/1v4gvcx
@reddit_androiddev
Help Needed Google Play Console Closed Testing
Hi fellow Android developers,
This is my first time submitting an app to the Google Play Store and my app is currently in closed testing phase.
When I check my Home tab within Google Play Console, it shows that my "Installed Audience" is 0, when I'm 100% sure that there are users who have downloaded my app and used it (they showed me screenshots).
Can someone tell me what may be gone wrong that's resulting it not detecting any installation?
Any tip would be appreciated!
https://redd.it/1v4kkbh
@reddit_androiddev
Hi fellow Android developers,
This is my first time submitting an app to the Google Play Store and my app is currently in closed testing phase.
When I check my Home tab within Google Play Console, it shows that my "Installed Audience" is 0, when I'm 100% sure that there are users who have downloaded my app and used it (they showed me screenshots).
Can someone tell me what may be gone wrong that's resulting it not detecting any installation?
Any tip would be appreciated!
https://redd.it/1v4kkbh
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Android Studio Quail 4 Canary 2 now available
https://androidstudio.googleblog.com/2026/07/android-studio-quail-4-canary-2-now.html
https://redd.it/1v4gcg8
@reddit_androiddev
https://androidstudio.googleblog.com/2026/07/android-studio-quail-4-canary-2-now.html
https://redd.it/1v4gcg8
@reddit_androiddev
Android Studio Release Updates
Android Studio Quail 4 Canary 2 now available
Android Studio Quail 4 Canary 2 is now available in the Canary channel. If you already have an Android Studio build on the Canary channe...
Android Studio Quail 2 Patch 1 now available
https://androidstudio.googleblog.com/2026/07/android-studio-quail-2-patch-1-now.html
https://redd.it/1v4gcfy
@reddit_androiddev
https://androidstudio.googleblog.com/2026/07/android-studio-quail-2-patch-1-now.html
https://redd.it/1v4gcfy
@reddit_androiddev
Android Studio Release Updates
Android Studio Quail 2 Patch 1 now available
Android Studio Quail 2 Patch 1 is now available in the Stable channel. If you already have an Android Studio build on the Stable channel...
Discussion AOSP telephony framework flaw on Android 14 (MediaTek): Missing hardware check causes infinite loop & thermal throttling.
PSA: I am posting this root cause analysis to document a severe flaw in the Android 14 / AOSP telephony framework implementation on MediaTek devices. I am not asking for tech support, but sharing the ADB logs and AOSP source code flaw for community awareness and developer visibility.
Device: Redmi Note 13 Pro 4G (MediaTek)
OS: HyperOS (Android 14) - Build 3.0.301.0.WNFEUXM
There is a severe logic bug in the telephony framework of the current HyperOS build. Using Mobile Data triggers an infinite event loop inside com.android.phone, locking the CPU at 140%+ usage and causing massive battery drain and thermal throttling. The device overheats, and the only temporary workaround is to toggle Airplane Mode (just turning off mobile data does nothing).
Using top -m 15, com.android.phone (PID 3173) consistently shows >140% CPU usage. The MediaTek RIL daemon (mtkfusionrild) is also constantly stressed.
By analyzing the radio buffer via logcat, I was able to pinpoint the exact root cause: the system is trying to register satellite modem listeners on a device that does not have satellite hardware.
The following block of code repeats in an infinite loop (around 30 times per second) as soon as mobile data connects:
07-24 00:15:24.708 3173 3173 D SatelliteController: Satellite for carrier is not supported.
07-24 00:15:24.709 3173 3173 D SatelliteController: registerForSatelliteModemStateChanged: add Listeners for ModemState
07-24 00:15:24.709 3173 3173 E SatelliteController: registerForSatelliteModemStateChanged: mSatelliteSessionController is not initialized yet
07-24 00:15:24.709 3173 3173 E SatelliteController: unregisterForModemStateChanged: mSatelliteSessionController is not initialized yet
07-24 00:15:24.709 3173 3173 D SatelliteController: unregisterForModemStateChanged: remove Listeners for ModemState
After digging deeper and cross-referencing with the AOSP source code and MediaTek vendor trees, it is clear this is an issue rooted in the telephony framework handling for Android 14 on MediaTek devices (this exact same INVALID_ARGUMENTS and mSatelliteSessionController loop has also been reproduced on Custom ROMs like crDroid for the Redmi Note 13 5G 'stone').
Looking at the AOSP source code (frameworks/opt/telephony/.../SatelliteController.java), the exception is correctly generated here:
@SatelliteErrorpublic int registerForSatelliteModemStateChanged(int subId,
@NonNull ISatelliteStateCallback callback) {
if (mSatelliteSessionController != null) {
mSatelliteSessionController.registerForSatelliteModemStateChanged(callback);
} else {
loge("registerForSatelliteModemStateChanged: mSatelliteSessionController is not initialized yet");
return SatelliteManager.SATELLITEINVALIDTELEPHONYSTATE;
}
return SatelliteManager.SATELLITEERRORNONE;
}
The SatelliteController correctly handles the lack of satellite hardware by returning SATELLITE\INVALID_TELEPHONY_STATE. The fatal flaw is in the higher-level network manager (likely the MediaTek RIL or the telephony framework's state machine). When it receives this error during a network transition (Wi-Fi to Mobile Data), it fails to handle the exception properly. Instead of aborting the satellite registration, it immediately retries the call in an unconditional infinite loop.
A simple conditional check (if (hasSatelliteHardware)) before attempting to register the listener in the network state change event within the calling process will completely resolve this battery drain issue for all MediaTek devices without satellite capabilities.
https://redd.it/1v4xebf
@reddit_androiddev
PSA: I am posting this root cause analysis to document a severe flaw in the Android 14 / AOSP telephony framework implementation on MediaTek devices. I am not asking for tech support, but sharing the ADB logs and AOSP source code flaw for community awareness and developer visibility.
Device: Redmi Note 13 Pro 4G (MediaTek)
OS: HyperOS (Android 14) - Build 3.0.301.0.WNFEUXM
There is a severe logic bug in the telephony framework of the current HyperOS build. Using Mobile Data triggers an infinite event loop inside com.android.phone, locking the CPU at 140%+ usage and causing massive battery drain and thermal throttling. The device overheats, and the only temporary workaround is to toggle Airplane Mode (just turning off mobile data does nothing).
Using top -m 15, com.android.phone (PID 3173) consistently shows >140% CPU usage. The MediaTek RIL daemon (mtkfusionrild) is also constantly stressed.
By analyzing the radio buffer via logcat, I was able to pinpoint the exact root cause: the system is trying to register satellite modem listeners on a device that does not have satellite hardware.
The following block of code repeats in an infinite loop (around 30 times per second) as soon as mobile data connects:
07-24 00:15:24.708 3173 3173 D SatelliteController: Satellite for carrier is not supported.
07-24 00:15:24.709 3173 3173 D SatelliteController: registerForSatelliteModemStateChanged: add Listeners for ModemState
07-24 00:15:24.709 3173 3173 E SatelliteController: registerForSatelliteModemStateChanged: mSatelliteSessionController is not initialized yet
07-24 00:15:24.709 3173 3173 E SatelliteController: unregisterForModemStateChanged: mSatelliteSessionController is not initialized yet
07-24 00:15:24.709 3173 3173 D SatelliteController: unregisterForModemStateChanged: remove Listeners for ModemState
After digging deeper and cross-referencing with the AOSP source code and MediaTek vendor trees, it is clear this is an issue rooted in the telephony framework handling for Android 14 on MediaTek devices (this exact same INVALID_ARGUMENTS and mSatelliteSessionController loop has also been reproduced on Custom ROMs like crDroid for the Redmi Note 13 5G 'stone').
Looking at the AOSP source code (frameworks/opt/telephony/.../SatelliteController.java), the exception is correctly generated here:
@SatelliteErrorpublic int registerForSatelliteModemStateChanged(int subId,
@NonNull ISatelliteStateCallback callback) {
if (mSatelliteSessionController != null) {
mSatelliteSessionController.registerForSatelliteModemStateChanged(callback);
} else {
loge("registerForSatelliteModemStateChanged: mSatelliteSessionController is not initialized yet");
return SatelliteManager.SATELLITEINVALIDTELEPHONYSTATE;
}
return SatelliteManager.SATELLITEERRORNONE;
}
The SatelliteController correctly handles the lack of satellite hardware by returning SATELLITE\INVALID_TELEPHONY_STATE. The fatal flaw is in the higher-level network manager (likely the MediaTek RIL or the telephony framework's state machine). When it receives this error during a network transition (Wi-Fi to Mobile Data), it fails to handle the exception properly. Instead of aborting the satellite registration, it immediately retries the call in an unconditional infinite loop.
A simple conditional check (if (hasSatelliteHardware)) before attempting to register the listener in the network state change event within the calling process will completely resolve this battery drain issue for all MediaTek devices without satellite capabilities.
https://redd.it/1v4xebf
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
AppRankly — Self-hosted dashboard for App Store & Google Play analytics
https://redd.it/1v54jaq
@reddit_androiddev
https://redd.it/1v54jaq
@reddit_androiddev