Are SMS formats from banks and apps actually consistent across users?
I’ve been looking at how different services send SMS (banks, Swiggy, Amazon, etc.), and something interesting came up.
Each message has a sender ID (like AX-HDFCBK, VM-AMAZON), but the actual message formats vary a lot — even for similar types of alerts.
I’m trying to understand:
How consistent formats are for the same sender ID
Whether different users receive slightly different formats
What patterns exist across senders
I’m building something around this space, so trying to map real-world variations.
If you’re comfortable, could you share 1–2 sample messages along with the sender ID?(Please mask any sensitive info like amounts, names, account numbers.)
Even just the structure + sender ID helps a lot.
Happy to share what I find if there’s interest.
https://redd.it/1rypk8g
@reddit_androiddev
I’ve been looking at how different services send SMS (banks, Swiggy, Amazon, etc.), and something interesting came up.
Each message has a sender ID (like AX-HDFCBK, VM-AMAZON), but the actual message formats vary a lot — even for similar types of alerts.
I’m trying to understand:
How consistent formats are for the same sender ID
Whether different users receive slightly different formats
What patterns exist across senders
I’m building something around this space, so trying to map real-world variations.
If you’re comfortable, could you share 1–2 sample messages along with the sender ID?(Please mask any sensitive info like amounts, names, account numbers.)
Even just the structure + sender ID helps a lot.
Happy to share what I find if there’s interest.
https://redd.it/1rypk8g
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
My dead game suddenly started growing after 2 years… no idea why
https://redd.it/1rz8045
@reddit_androiddev
https://redd.it/1rz8045
@reddit_androiddev
Planning to take the Meta Android Developer Professional Certificate on Coursera. Need a review.
I’m planning to take the Meta Android Developer Professional Certificate and would appreciate any reviews or advice from someone who has completed it before. I’m new to Android development and would like to know what topics the course covers. I’m also wondering if I should purchase the certificate.
https://redd.it/1rz947r
@reddit_androiddev
I’m planning to take the Meta Android Developer Professional Certificate and would appreciate any reviews or advice from someone who has completed it before. I’m new to Android development and would like to know what topics the course covers. I’m also wondering if I should purchase the certificate.
https://redd.it/1rz947r
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Google Play app signing turned on but AAB still rejected.
I've had an app on the Play store for over ten years. I recently went to update it and am switching to the Google Play app signing and AAB process. It's been tricky to make this work and I've hit a snag at the AAB signing. I registered for Google Play signing, created the private key and uploaded it to Play. But when I upload a new AAB, it says all AAB's must be signed. You can see that Google Play managed app signing is turned on in this screen grab. I'm lost and the docs haven't helped me find the solution.
https://preview.redd.it/r9zl5n9rc9qg1.png?width=1718&format=png&auto=webp&s=4a64ef2fb2734aef0369c81f626b8f26cfad89be
https://redd.it/1rz6yy7
@reddit_androiddev
I've had an app on the Play store for over ten years. I recently went to update it and am switching to the Google Play app signing and AAB process. It's been tricky to make this work and I've hit a snag at the AAB signing. I registered for Google Play signing, created the private key and uploaded it to Play. But when I upload a new AAB, it says all AAB's must be signed. You can see that Google Play managed app signing is turned on in this screen grab. I'm lost and the docs haven't helped me find the solution.
https://preview.redd.it/r9zl5n9rc9qg1.png?width=1718&format=png&auto=webp&s=4a64ef2fb2734aef0369c81f626b8f26cfad89be
https://redd.it/1rz6yy7
@reddit_androiddev
why do companies marketing with fake ads?
you know that grand mafia game. lv1 crok doing weird stuff. well its just a basic png city builder game and its nothing like ads. but their fake ads running since 2021-?.
also how they keep their rating at 4.4+. its the most p2w game i ever played. fake ad + p2w combo is literally asking for 1 star. yet my f2p ad free game struggling to keep 3.9 rating.
https://redd.it/1rz3vnh
@reddit_androiddev
you know that grand mafia game. lv1 crok doing weird stuff. well its just a basic png city builder game and its nothing like ads. but their fake ads running since 2021-?.
also how they keep their rating at 4.4+. its the most p2w game i ever played. fake ad + p2w combo is literally asking for 1 star. yet my f2p ad free game struggling to keep 3.9 rating.
https://redd.it/1rz3vnh
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Rebooting TV in Loop used 1minute
Hello Guys, I bought Xaomi OLED TV from China(Chinese ROM) about two weeks ago. After seeing it u, I though I could change the language to English since the option is is available, bit I found out it only changed systems language in setting and not third-partu apps. After doing my research I found out I can disable the luncher and load custom luncher to get it in full English. I found out I can use my phone with adb with USB debugging enabled. So I hoped onti ChatGPT for help and I managed to do it, and loaded Projectivity Luncher, but unfortunately after restart my TV went into android Recover mode. I was given an option Try Again and Factory Data Reset. I did factory to at least savey device but nothing worked. I finally managed to get the TV to boot and load the lunched but it will reboots 45seconds after luncher has fully loaded. Now it is booting loop. I reached out to Xaomi to help but the told me unless I send the TV back to China, and they do not have the firmware to send me to fix it. Nosy new TV which I could not use for two weeks is stuckdd on 45 seconds boot loop. I have been trying to at least enable USB debugging to add I can connect and run a code to fi bit yet, the time to operate the TV is not enough. Sometime moment after getting us debugging TV reboots and it is disabled. Remember I am not a developer, I was only relying on ChatGPT. Now, I don't know any Chinese Website where I can get the firmware.. The TV is 2021 Model with Android 10. Is there a way I can get USB debugging enabled even before the lunched loads? Or can anyone suggest a Chinese website where I can get the firmware to flash it. Any ideas is welcome. I am expecting visitors in a couple of weeks time and this is the only TV I have at the moment. Any help or suggestion is welcome. I have tried all ADB apps but enabling USB debugging and connection with my phone to runn a code has not been successful due to constant rebooting. Whatever you can do yo help I will appreciate.
https://redd.it/1rzd1g0
@reddit_androiddev
Hello Guys, I bought Xaomi OLED TV from China(Chinese ROM) about two weeks ago. After seeing it u, I though I could change the language to English since the option is is available, bit I found out it only changed systems language in setting and not third-partu apps. After doing my research I found out I can disable the luncher and load custom luncher to get it in full English. I found out I can use my phone with adb with USB debugging enabled. So I hoped onti ChatGPT for help and I managed to do it, and loaded Projectivity Luncher, but unfortunately after restart my TV went into android Recover mode. I was given an option Try Again and Factory Data Reset. I did factory to at least savey device but nothing worked. I finally managed to get the TV to boot and load the lunched but it will reboots 45seconds after luncher has fully loaded. Now it is booting loop. I reached out to Xaomi to help but the told me unless I send the TV back to China, and they do not have the firmware to send me to fix it. Nosy new TV which I could not use for two weeks is stuckdd on 45 seconds boot loop. I have been trying to at least enable USB debugging to add I can connect and run a code to fi bit yet, the time to operate the TV is not enough. Sometime moment after getting us debugging TV reboots and it is disabled. Remember I am not a developer, I was only relying on ChatGPT. Now, I don't know any Chinese Website where I can get the firmware.. The TV is 2021 Model with Android 10. Is there a way I can get USB debugging enabled even before the lunched loads? Or can anyone suggest a Chinese website where I can get the firmware to flash it. Any ideas is welcome. I am expecting visitors in a couple of weeks time and this is the only TV I have at the moment. Any help or suggestion is welcome. I have tried all ADB apps but enabling USB debugging and connection with my phone to runn a code has not been successful due to constant rebooting. Whatever you can do yo help I will appreciate.
https://redd.it/1rzd1g0
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
After 14 days of closed testing, "The Iron Oracle" just got approved for Production on the 1st try!
https://redd.it/1rzgdb6
@reddit_androiddev
https://redd.it/1rzgdb6
@reddit_androiddev
I built an open-source Android debugging toolkit with 25+ tools — replaces Chucker, Flipper, and Stetho
I got tired of juggling Chucker for network, LeakCanary for leaks, random scripts for SharedPreferences, and Logcat for everything else. So I built WormaCeptor — a single library that puts 25+ debugging tools in one UI.
**What it does**
* Network inspection (OkHttp + Ktor + WebSocket + WebView)
* Performance monitoring (FPS, Memory, CPU with floating overlay)
* SQLite browser with query execution
* SharedPreferences and EncryptedSharedPreferences viewer/editor
* Leak detection for Activities and Fragments
* Crash reporting with stack traces
* Push notification simulator
* GPS location mocking
* File browser, device info, loaded libraries
* Crypto tools (AES, RSA, hashing)
* Network throttling (2G/3G/4G/WiFi presets)
**Why not the existing tools?**
* Flipper is deprecated by Meta
* Stetho has been archived for years
* Chucker does network well but nothing else
**Production safety:**
The toolkit uses `debugImplementation` — your release APK never contains WormaCeptor code. Not because of ProGuard, but because it’s never compiled in. The API client is a lightweight no-op in release builds.
**Tech stack:** 50+ Gradle modules, Clean Architecture, 100% Kotlin, Jetpack Compose UI, ArchUnit-enforced module boundaries.
**Getting started:**
add the dependencies
// The API client is lightweight and always present
implementation("com.github.azikar24.WormaCeptor:api-client:2.2.0")
// The actual toolkit only exists in debug builds
debugImplementation("com.github.azikar24.WormaCeptor:api-impl-persistence:2.2.0")
In release builds, **WormaCeptorApi** calls silently do nothing. No reflection tricks, no runtime checks. The implementation module isn’t there, so there’s nothing to run.
// Application.kt
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
WormaCeptorApi.init(this)
}
}
Add the interceptor to your HTTP client
// OkHttp
val client = OkHttpClient.Builder()
.addInterceptor(WormaCeptorInterceptor())
.build()
// Ktor
val client = HttpClient(CIO) {
install(WormaCeptorKtorPlugin) {
maxContentLength = 500_000L
}
}
Sensitive data? Redact it:
WormaCeptorInterceptor()
.redactHeader("Authorization")
.redactJsonValue("password")
.redactXmlValue("apiKey")
Then wire up one of the launch methods:
// Shake to open (lifecycle-aware, auto-stops on destroy)
WormaCeptorApi.startActivityOnShake(activity)
// Or a draggable floating button (requires SYSTEM_ALERT_WINDOW)
WormaCeptorApi.showFloatingButton(context)
// Or launch manually from anywhere
startActivity(WormaCeptorApi.getLaunchIntent(context))
**Links:**
\- GitHub: [https://github.com/azikar24/WormaCeptor](https://github.com/azikar24/WormaCeptor)
\- Demo app on Google Play: [https://play.google.com/store/apps/details?id=com.azikar24.wormaceptorapp](https://play.google.com/store/apps/details?id=com.azikar24.wormaceptorapp)
\- Demo video: [https://youtube.com/shorts/iSEifbkq7NI](https://youtube.com/shorts/iSEifbkq7NI)
MIT licensed. Issues and PRs welcome.
https://redd.it/1rzdi2o
@reddit_androiddev
I got tired of juggling Chucker for network, LeakCanary for leaks, random scripts for SharedPreferences, and Logcat for everything else. So I built WormaCeptor — a single library that puts 25+ debugging tools in one UI.
**What it does**
* Network inspection (OkHttp + Ktor + WebSocket + WebView)
* Performance monitoring (FPS, Memory, CPU with floating overlay)
* SQLite browser with query execution
* SharedPreferences and EncryptedSharedPreferences viewer/editor
* Leak detection for Activities and Fragments
* Crash reporting with stack traces
* Push notification simulator
* GPS location mocking
* File browser, device info, loaded libraries
* Crypto tools (AES, RSA, hashing)
* Network throttling (2G/3G/4G/WiFi presets)
**Why not the existing tools?**
* Flipper is deprecated by Meta
* Stetho has been archived for years
* Chucker does network well but nothing else
**Production safety:**
The toolkit uses `debugImplementation` — your release APK never contains WormaCeptor code. Not because of ProGuard, but because it’s never compiled in. The API client is a lightweight no-op in release builds.
**Tech stack:** 50+ Gradle modules, Clean Architecture, 100% Kotlin, Jetpack Compose UI, ArchUnit-enforced module boundaries.
**Getting started:**
add the dependencies
// The API client is lightweight and always present
implementation("com.github.azikar24.WormaCeptor:api-client:2.2.0")
// The actual toolkit only exists in debug builds
debugImplementation("com.github.azikar24.WormaCeptor:api-impl-persistence:2.2.0")
In release builds, **WormaCeptorApi** calls silently do nothing. No reflection tricks, no runtime checks. The implementation module isn’t there, so there’s nothing to run.
// Application.kt
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
WormaCeptorApi.init(this)
}
}
Add the interceptor to your HTTP client
// OkHttp
val client = OkHttpClient.Builder()
.addInterceptor(WormaCeptorInterceptor())
.build()
// Ktor
val client = HttpClient(CIO) {
install(WormaCeptorKtorPlugin) {
maxContentLength = 500_000L
}
}
Sensitive data? Redact it:
WormaCeptorInterceptor()
.redactHeader("Authorization")
.redactJsonValue("password")
.redactXmlValue("apiKey")
Then wire up one of the launch methods:
// Shake to open (lifecycle-aware, auto-stops on destroy)
WormaCeptorApi.startActivityOnShake(activity)
// Or a draggable floating button (requires SYSTEM_ALERT_WINDOW)
WormaCeptorApi.showFloatingButton(context)
// Or launch manually from anywhere
startActivity(WormaCeptorApi.getLaunchIntent(context))
**Links:**
\- GitHub: [https://github.com/azikar24/WormaCeptor](https://github.com/azikar24/WormaCeptor)
\- Demo app on Google Play: [https://play.google.com/store/apps/details?id=com.azikar24.wormaceptorapp](https://play.google.com/store/apps/details?id=com.azikar24.wormaceptorapp)
\- Demo video: [https://youtube.com/shorts/iSEifbkq7NI](https://youtube.com/shorts/iSEifbkq7NI)
MIT licensed. Issues and PRs welcome.
https://redd.it/1rzdi2o
@reddit_androiddev
GitHub
GitHub - azikar24/WormaCeptor: A modular Android debugging toolkit and network inspector built with Clean Architecture and Jetpack…
A modular Android debugging toolkit and network inspector built with Clean Architecture and Jetpack Compose — designed for zero-impact production builds. - azikar24/WormaCeptor
android testing might kill us
Hi everyone, i'm building a fintech app with just me plus 2 other devs and android testing has been an absolute hell, it's just endless debugging and we're barely keeping up.
A friend told me about drizz.dev yesterday, it looked promising so I have booked their free demo for now.
anyone here actually using it for android testing? Does it actually work for small teams or is it something scammy? If not drizz, what else are you guys using that actually works as promised? honest opinions only please
https://redd.it/1rzjpgo
@reddit_androiddev
Hi everyone, i'm building a fintech app with just me plus 2 other devs and android testing has been an absolute hell, it's just endless debugging and we're barely keeping up.
A friend told me about drizz.dev yesterday, it looked promising so I have booked their free demo for now.
anyone here actually using it for android testing? Does it actually work for small teams or is it something scammy? If not drizz, what else are you guys using that actually works as promised? honest opinions only please
https://redd.it/1rzjpgo
@reddit_androiddev
www.drizz.dev
Drizz : Vision AI Powered Mobile App Testing Agent
Drizz is a Vision AI mobile app testing platform for Android and iOS. Automate UI testing on real devices with plain-English tests and self-healing execution.
🚀 Mutual Support: 5⭐ Review + 14 Days Testing (I’ll Return the Same!)
Hey everyone! 👋
My app is now live on Google Play, and I’m looking for mutual support with other developers.
If you download my app, try it, and leave a 5-star rating ⭐ along with a positive review, send me a screenshot — I will do the same for your app and also test it actively for 14 days.
Let’s support each other and grow together! 🚀
Here’s my app:
https://play.google.com/store/apps/details?id=com.quizmastertr.app
https://redd.it/1rzkshk
@reddit_androiddev
Hey everyone! 👋
My app is now live on Google Play, and I’m looking for mutual support with other developers.
If you download my app, try it, and leave a 5-star rating ⭐ along with a positive review, send me a screenshot — I will do the same for your app and also test it actively for 14 days.
Let’s support each other and grow together! 🚀
Here’s my app:
https://play.google.com/store/apps/details?id=com.quizmastertr.app
https://redd.it/1rzkshk
@reddit_androiddev
Google Play
QuizMaster - Para Kazan - Apps on Google Play
Answer fun questions, collect points, and win cash prizes instantly!
Solve the Android Deeplink Nightmare Once and For All
Android deeplinks are such a pain because they live in two places (manifest + Kotlin code) and it's super easy to get them out of sync.
So I built DeepMatch, an android deeplink toolkit with a Gradle plugin that lets you write your deeplink spec once in YAML and generates everything else, and a runtime matcher for parsing and matching the incoming intents. No more syncing two files manually. No more silent runtime failures.
## Quick example:
Plugin generates:
- ✅ Manifest intent filters
- ✅ Type-safe Kotlin classes (url Params mapped)
- ✅ Runtime processor (matcher)
- ✅ Build-time validation (catches collisions, dups, etc.)
## Before vs After
Before:
After:
## Multi-module support (Optional)
Each module can declare its own
✅ No silent collisions in production.
## Validation at build time
- ❌ Missing schemes? Build fails.
- ❌ Duplicate names? Build fails.
- ❌ Collisions across modules? Build fails.
- ✅ You catch it immediately, not when users hit broken links.
## Setup
Drop
## Check it out here
- GitHub: aouledissa/deep-match
- Docs: aouledissa.com/deep-match
---
## FAQ
Actually generates the manifest? Yep.
Works with multi-module? Yep. Finds all specs, composes them, checks collisions.
Type-safe? Completely. YAML → Kotlin classes, matched with
Extendable? Yeah, processor is designed to be extended.
Config cache? Yes.
Would love feedback or to hear if you use it! Issues and PRs are of course welcomed.
https://redd.it/1rzly6n
@reddit_androiddev
Android deeplinks are such a pain because they live in two places (manifest + Kotlin code) and it's super easy to get them out of sync.
So I built DeepMatch, an android deeplink toolkit with a Gradle plugin that lets you write your deeplink spec once in YAML and generates everything else, and a runtime matcher for parsing and matching the incoming intents. No more syncing two files manually. No more silent runtime failures.
## Quick example:
deeplinkSpecs:
- name: "open profile"
activity: com.example.ProfileActivity
scheme: [https, app]
host: [example.com]
pathParams:
- name: userId
type: numeric
Plugin generates:
- ✅ Manifest intent filters
- ✅ Type-safe Kotlin classes (url Params mapped)
- ✅ Runtime processor (matcher)
- ✅ Build-time validation (catches collisions, dups, etc.)
## Before vs After
Before:
val userId = intent.data?.getQueryParameter("userId")?.toInt() // crashes if invalid
val ref = intent.data?.getQueryParameter("ref") // null or not? who knows
After:
when (val params = AppDeeplinkProcessor.match(intent.data) as? AppDeeplinkParams) {
is OpenProfileDeeplinkParams -> openProfile(params.userId, params.ref) // types are safe
null -> showHome()
}
## Multi-module support (Optional)
Each module can declare its own
.deeplinks.yml. If two modules accidentally claim the same deeplink, the build fails and tells you. ✅ No silent collisions in production.
## Validation at build time
- ❌ Missing schemes? Build fails.
- ❌ Duplicate names? Build fails.
- ❌ Collisions across modules? Build fails.
- ✅ You catch it immediately, not when users hit broken links.
## Setup
plugins {
id("com.aouledissa.deepmatch.gradle") version "<VERSION>"
}
dependencies {
implementation("com.aouledissa.deepmatch:deepmatch-processor:<VERSION>")
}
Drop
.deeplinks.yml in your app folder. Done ✅!## Check it out here
- GitHub: aouledissa/deep-match
- Docs: aouledissa.com/deep-match
---
## FAQ
Actually generates the manifest? Yep.
Works with multi-module? Yep. Finds all specs, composes them, checks collisions.
Type-safe? Completely. YAML → Kotlin classes, matched with
when.Extendable? Yeah, processor is designed to be extended.
Config cache? Yes.
Would love feedback or to hear if you use it! Issues and PRs are of course welcomed.
https://redd.it/1rzly6n
@reddit_androiddev
GitHub
GitHub - aouledissa/deep-match: An Android gradle plugin and library that automates deeplink matching and handling
An Android gradle plugin and library that automates deeplink matching and handling - aouledissa/deep-match
Built a Manga Tracker App – Looking for Feedback on UX & Features
Hey everyone 👋
I’ve built an app called MangaLoop – a manga/manhwa/manhua tracker.
I’d love feedback on:
• UI/UX
• Performance
• Feature suggestions
If anyone is interested in trying it out and sharing feedback, let me know.
Would appreciate any developer insights 🙌
https://redd.it/1rzn6lc
@reddit_androiddev
Hey everyone 👋
I’ve built an app called MangaLoop – a manga/manhwa/manhua tracker.
I’d love feedback on:
• UI/UX
• Performance
• Feature suggestions
If anyone is interested in trying it out and sharing feedback, let me know.
Would appreciate any developer insights 🙌
https://redd.it/1rzn6lc
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Feedback from my photo-privacy app
I am Building a free open source app with focus on protecting pictures in a different way rather than the "hidden folder".
Concept: Don't Hide the image somewhere and unlock It with the password. But, Encrypt the image byte per byte with the password using AES, this Will produce a "glitched" image you can store in your gallery without worrying someone scrolling through your gallery can sees It, or you can store it safetly on you driver or share It. By using the same sentence, the image Will be decrypted and you Will get the original picture with no quality loss.
The idea here Is not to Hide the image, but make It unreadable. I have already done this app, for mu portfolio, and i wanted to improve It, maybe adding more Features such as palette Layer to make the finale image less "glitched" and more "artistic", but i don't know if the effort worth It.
What do you think? Would you use this? 100% local, opensource, no server or external calls.
Do you have any suggestion for more Features or how to improve this? Open to hear tour thoughts!
https://redd.it/1rznqqx
@reddit_androiddev
I am Building a free open source app with focus on protecting pictures in a different way rather than the "hidden folder".
Concept: Don't Hide the image somewhere and unlock It with the password. But, Encrypt the image byte per byte with the password using AES, this Will produce a "glitched" image you can store in your gallery without worrying someone scrolling through your gallery can sees It, or you can store it safetly on you driver or share It. By using the same sentence, the image Will be decrypted and you Will get the original picture with no quality loss.
The idea here Is not to Hide the image, but make It unreadable. I have already done this app, for mu portfolio, and i wanted to improve It, maybe adding more Features such as palette Layer to make the finale image less "glitched" and more "artistic", but i don't know if the effort worth It.
What do you think? Would you use this? 100% local, opensource, no server or external calls.
Do you have any suggestion for more Features or how to improve this? Open to hear tour thoughts!
https://redd.it/1rznqqx
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
I built a JSON viewer & editor for mobile with 30+ features — free, no account needed
^(ey everyone,)
^(I'm a solo Flutter developer and I just shipped v1.1.0 of my JSON tool for Android and iOS. I built it because every existing JSON app on mobile was)
^(either ugly, abandoned, or missing basic features.)
^(What it does:)
^(- Tree view + code view with syntax highlighting)
^(- JSON Diff — compare two files side by side)
^(- API Client — test any REST endpoint (GET/POST/PUT/DELETE))
^(- Schema validation (JSON Schema Draft 7))
^(- JSONPath queries)
^(- Export to PDF, Excel, YAML, XML, CSV)
^(- JSON Fixer — auto-repairs broken JSON)
^(- 15 languages)
^(- Works completely offline)
^(It's free, no account needed, no data collected.)
^(Android:) ^(https://play.google.com/store/apps/details?id=com.cosmovex.jsonvedit)
^(iOS:) ^(https://apps.apple.com/in/app/json-viewer-and-editor/id6760624709)
https://redd.it/1rzpi07
@reddit_androiddev
^(ey everyone,)
^(I'm a solo Flutter developer and I just shipped v1.1.0 of my JSON tool for Android and iOS. I built it because every existing JSON app on mobile was)
^(either ugly, abandoned, or missing basic features.)
^(What it does:)
^(- Tree view + code view with syntax highlighting)
^(- JSON Diff — compare two files side by side)
^(- API Client — test any REST endpoint (GET/POST/PUT/DELETE))
^(- Schema validation (JSON Schema Draft 7))
^(- JSONPath queries)
^(- Export to PDF, Excel, YAML, XML, CSV)
^(- JSON Fixer — auto-repairs broken JSON)
^(- 15 languages)
^(- Works completely offline)
^(It's free, no account needed, no data collected.)
^(Android:) ^(https://play.google.com/store/apps/details?id=com.cosmovex.jsonvedit)
^(iOS:) ^(https://apps.apple.com/in/app/json-viewer-and-editor/id6760624709)
https://redd.it/1rzpi07
@reddit_androiddev
Google Play
JSON Viewer & Editor - Apps on Google Play
View, edit, format & validate JSON. Pretty print, minify, tree view & convert.
kill switch for old versions of my app - fraud, hacking - lucky patcher
About to release my app
My database rules are tight.
And my app is "reasonably" secure.
Today, I don't verify receipts on my back end - it's there but switched off.
The app checks for (i) "success" flag from the Google/Apple store or (ii) string "gold" value from the users account in my database (write access blocked)
Wondering if there is a kill switch I can put in my apps? because there are old .apk's/.app out there for many apps, so I don't want to give away my features in those older less secure versions to hackers who will just intercept "gold" and get free access?
EDIT: My latest solution --> if TODAY() < 3 months from X date THEN Kill App - to force users to eventually update the app
https://redd.it/1rzoq7w
@reddit_androiddev
About to release my app
My database rules are tight.
And my app is "reasonably" secure.
Today, I don't verify receipts on my back end - it's there but switched off.
The app checks for (i) "success" flag from the Google/Apple store or (ii) string "gold" value from the users account in my database (write access blocked)
Wondering if there is a kill switch I can put in my apps? because there are old .apk's/.app out there for many apps, so I don't want to give away my features in those older less secure versions to hackers who will just intercept "gold" and get free access?
EDIT: My latest solution --> if TODAY() < 3 months from X date THEN Kill App - to force users to eventually update the app
https://redd.it/1rzoq7w
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
Built this for Android devs dealing with Google Play rejections — would love feedback
I kept getting stuck on vague Play Console rejection emails, so I built a small tool to speed up fixes:
PlayStorisk → [https://playstorisk.com](https://playstorisk.com)
What it does:
* Free Pre-Submission Check (permissions/SDK/privacy risk signals)
* Free APK scan (manifest + SDK + policy-risk indicators)
* Rejection email analyzer that turns boilerplate rejection text into:
* probable root cause
* prioritized fix steps
* direct Play Console section links
I’m not claiming “guaranteed approval” — it’s just a debugging assistant for policy/compliance work.
I just launched and I’m looking for honest feedback from Android devs:
* Is the output actionable enough?
* What’s missing for real-world rejection workflows?
* What would make this worth using before every release?
https://redd.it/1rzsdkf
@reddit_androiddev
I kept getting stuck on vague Play Console rejection emails, so I built a small tool to speed up fixes:
PlayStorisk → [https://playstorisk.com](https://playstorisk.com)
What it does:
* Free Pre-Submission Check (permissions/SDK/privacy risk signals)
* Free APK scan (manifest + SDK + policy-risk indicators)
* Rejection email analyzer that turns boilerplate rejection text into:
* probable root cause
* prioritized fix steps
* direct Play Console section links
I’m not claiming “guaranteed approval” — it’s just a debugging assistant for policy/compliance work.
I just launched and I’m looking for honest feedback from Android devs:
* Is the output actionable enough?
* What’s missing for real-world rejection workflows?
* What would make this worth using before every release?
https://redd.it/1rzsdkf
@reddit_androiddev
Playstorisk
Play Store Risk Checker
Analyze Google Play rejection emails and get actionable fix steps. AI-powered reports with root cause, remediation steps, and Play Console links.
I built an AI QA Engineer for Android Apps (No Human Supervision)
I built OpenTester because Claude Code was writing Android features faster than I could test them.
Every time the agent made a change, I was stuck in a loop: opening the emulator, manually navigating the same flows, and re-running regressions to make sure nothing else broke.
So I built OpenTester. It’s an open-source AI QA engineer that plugs into Claude Code via MCP. Now, the agent can autonomously launch the app, navigate the UI like a human, and save those steps in a JSON format that allows it to revalidate them in the future. It essentially gives the coding agent “eyes” and a way to verify its own work.
It’s fully open-source and free for early users: https://github.com/andresuarezz26/OpenTester
https://redd.it/1rztk2b
@reddit_androiddev
I built OpenTester because Claude Code was writing Android features faster than I could test them.
Every time the agent made a change, I was stuck in a loop: opening the emulator, manually navigating the same flows, and re-running regressions to make sure nothing else broke.
So I built OpenTester. It’s an open-source AI QA engineer that plugs into Claude Code via MCP. Now, the agent can autonomously launch the app, navigate the UI like a human, and save those steps in a JSON format that allows it to revalidate them in the future. It essentially gives the coding agent “eyes” and a way to verify its own work.
It’s fully open-source and free for early users: https://github.com/andresuarezz26/OpenTester
https://redd.it/1rztk2b
@reddit_androiddev
GitHub
GitHub - andresuarezz26/OpenTester: Claude Code now can test Android apps like a QA Engineer
Claude Code now can test Android apps like a QA Engineer - andresuarezz26/OpenTester
How can i find my first freelance project as an kotlin android developer
I have build good number of Saas applications in kotlin and jetpack compose and using firebase as backend.Looking for work? It would be greatfull if someone can help
https://redd.it/1rzw6js
@reddit_androiddev
I have build good number of Saas applications in kotlin and jetpack compose and using firebase as backend.Looking for work? It would be greatfull if someone can help
https://redd.it/1rzw6js
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community
getCurrentLocation() hangs indefinitely on Honor devices when the OEM battery saver kills GPS hardware — a priority fallback chain solution
I have been working on a project that requires reliable background GPS on Android. The use case is periodic location checks every 30 to 60 minutes from a foreground service. Not navigation — just confirming approximate position over long periods. I have been testing on an Honor device, and discovered a gap in the FusedLocationProviderClient API that I have not seen discussed much.
The problem
At approximately 12% battery, the OEM battery saver silently killed GPS hardware access. There was no exception, no error callback, and no log entry. The foreground service remained alive and the accelerometer continued working for over 13 hours. However, getCurrentLocation(PRIORITY_HIGH_ACCURACY) simply never completed. The Task from Play Services hung indefinitely — neither
The code fell back to getLastLocation(), which returned a 5-hour-old cached position from a completely different city. The system had no indication anything was wrong.
The root cause is that getCurrentLocation() returns a Task with no built-in timeout. If the GPS hardware is throttled or killed by the OEM power manager, that Task never resolves. Most applications never encounter this because they use location briefly in the foreground.
A typical implementation looks like this:
On Honor at low battery, this coroutine never completes and the entire location pipeline stops.
Solution 1: Coroutine timeout
The first step is wrapping every getCurrentLocation() call in withTimeoutOrNull:
This prevents the hang, but now the result is simply null. There is still no location.
Solution 2: Priority fallback chain
GPS hardware being dead does not mean all location sources are unavailable. Cell towers and Wi-Fi still function because the phone needs them for connectivity. I built a sequential fallback:
> PRIORITY_HIGH_ACCURACY (GPS hardware, approximately 10 meters)
>↓ null or timeout
> PRIORITY_BALANCED_POWER_ACCURACY (Wi-Fi + cell, approximately 40-300 meters)
>↓ null or timeout
> PRIORITY_LOW_POWER (cell only, approximately 300 meters to 3 kilometers)
>↓ null or timeout
> lastLocation (cached, any age)
>↓ null
> total failure
Each step receives its own 30-second timeout. In practice, when GPS hardware is killed, BALANCED_POWER_ACCURACY usually returns within 2 to 3 seconds because Wi-Fi scanning still works.
Three-kilometer accuracy from a cell tower sounds poor, but it answers the question "is this person in the expected city or 200 kilometers away on a highway?" For my use case, that prevented an incorrect assessment based on a stale cached position.
Solution 3: GPS wake probe
Sometimes the GPS hardware is not permanently dead — it has been suspended by the battery manager. A brief requestLocationUpdates call can wake it:
Five seconds, maximum once every 4 hours, approximately 6 probes per day. On Honor, this recovers the GPS hardware
I have been working on a project that requires reliable background GPS on Android. The use case is periodic location checks every 30 to 60 minutes from a foreground service. Not navigation — just confirming approximate position over long periods. I have been testing on an Honor device, and discovered a gap in the FusedLocationProviderClient API that I have not seen discussed much.
The problem
At approximately 12% battery, the OEM battery saver silently killed GPS hardware access. There was no exception, no error callback, and no log entry. The foreground service remained alive and the accelerometer continued working for over 13 hours. However, getCurrentLocation(PRIORITY_HIGH_ACCURACY) simply never completed. The Task from Play Services hung indefinitely — neither
onSuccessListener nor onFailureListener ever fired.The code fell back to getLastLocation(), which returned a 5-hour-old cached position from a completely different city. The system had no indication anything was wrong.
The root cause is that getCurrentLocation() returns a Task with no built-in timeout. If the GPS hardware is throttled or killed by the OEM power manager, that Task never resolves. Most applications never encounter this because they use location briefly in the foreground.
A typical implementation looks like this:
suspend fun getLocation(): Location? {return suspendCancellableCoroutine { cont -> fusedClient.getCurrentLocation(PRIORITY_HIGH_ACCURACY, token).addOnSuccessListener { cont.resume(it) }.addOnFailureListener { cont.resume(null) }} }On Honor at low battery, this coroutine never completes and the entire location pipeline stops.
Solution 1: Coroutine timeout
The first step is wrapping every getCurrentLocation() call in withTimeoutOrNull:
suspend fun getLocation(priority: Int): Location? { return withTimeoutOrNull(30_000L) {suspendCancellableCoroutine { cont ->fusedClient.getCurrentLocation(priority, token).addOnSuccessListener { cont.resume(it) }.addOnFailureListener { cont.resume(null) }}}}This prevents the hang, but now the result is simply null. There is still no location.
Solution 2: Priority fallback chain
GPS hardware being dead does not mean all location sources are unavailable. Cell towers and Wi-Fi still function because the phone needs them for connectivity. I built a sequential fallback:
> PRIORITY_HIGH_ACCURACY (GPS hardware, approximately 10 meters)
>↓ null or timeout
> PRIORITY_BALANCED_POWER_ACCURACY (Wi-Fi + cell, approximately 40-300 meters)
>↓ null or timeout
> PRIORITY_LOW_POWER (cell only, approximately 300 meters to 3 kilometers)
>↓ null or timeout
> lastLocation (cached, any age)
>↓ null
> total failure
Each step receives its own 30-second timeout. In practice, when GPS hardware is killed, BALANCED_POWER_ACCURACY usually returns within 2 to 3 seconds because Wi-Fi scanning still works.
Three-kilometer accuracy from a cell tower sounds poor, but it answers the question "is this person in the expected city or 200 kilometers away on a highway?" For my use case, that prevented an incorrect assessment based on a stale cached position.
Solution 3: GPS wake probe
Sometimes the GPS hardware is not permanently dead — it has been suspended by the battery manager. A brief requestLocationUpdates call can wake it:
if (hoursSinceLastFreshGps > 4) {val probeRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 1000L).setDurationMillis(5_000L).setMaxUpdates(5).build()withTimeoutOrNull(6_000L) {fusedClient.requestLocationUpdates(probeRequest, callback, looper)// wait for callback or timeout}fusedClient.removeLocationUpdates(callback)}Five seconds, maximum once every 4 hours, approximately 6 probes per day. On Honor, this recovers the GPS hardware
roughly 40% of the time. When it works, subsequent getCurrentLocation(HIGH_ACCURACY) calls start succeeding again.
Solution 4: Explicit outcome type
The original code returned Unit from the location request method. The caller had no way to distinguish a fresh 10-meter GPS fix from a 5-hour-old cached position. I changed the return type to make this explicit:
Now the caller can make informed decisions. A fresh GPS fix means high confidence. A cell fallback at 3 kilometers is useful but low precision. A stale location from 5 hours ago is a warning, not data.
An important design decision: CellFallback is treated as neutral — GPS hardware is still broken (do not reset the failure counter), but usable data exists (do not trigger aggressive backoff either).
The consumer looks like:
An unexpected race condition
I had multiple independent trigger paths requesting GPS concurrently. Two of them fired within 33 milliseconds of each other. Both read the same getLastLocation(), both passed the stationarity filter, and both inserted a GPS reading. The result was two identical readings 33 milliseconds apart.
My code uses a minimum-readings-per-cluster filter to discard drive-through locations (a place needs at least 2 GPS readings to count as a real visit). The duplicate entry from the race condition defeated this filter — a single drive-by became a "cluster of 2." The fix was a Mutex around the entire processLocation path:
Additional note on dependency versions
I was using play-services-location 21.0.1 for months. Upgrading to 21.3.0 resolved some GPS reliability edge cases I had not yet identified. If you are doing background location work, it is worth checking whether your dependency version is current.
Summary
getCurrentLocation() can hang indefinitely on OEM-throttled devices. Always wrap it in withTimeoutOrNull. Build a priority fallback chain through all available location sources. Consider a brief
wake probe for GPS hardware recovery. Return an explicit outcome type so callers know the quality of data they received. If you have multiple GPS trigger paths, serialize them with a Mutex.
I have only tested this on Honor. I would be interested to hear whether anyone has observed similar GPS hardware suspension on other manufacturers.
https://redd.it/1s028ty
@reddit_androiddev
Solution 4: Explicit outcome type
The original code returned Unit from the location request method. The caller had no way to distinguish a fresh 10-meter GPS fix from a 5-hour-old cached position. I changed the return type to make this explicit:
sealed interface GpsLocationOutcome {data class FreshGps(val accuracy: Float) : GpsLocationOutcomedata class CellFallback(val accuracy: Float) : GpsLocationOutcomedata class WakeProbeSuccess(val accuracy: Float) : GpsLocationOutcomedata class StaleLastLocation(val ageMs: Long) : GpsLocationOutcomedata object TotalFailure : GpsLocationOutcome}Now the caller can make informed decisions. A fresh GPS fix means high confidence. A cell fallback at 3 kilometers is useful but low precision. A stale location from 5 hours ago is a warning, not data.
An important design decision: CellFallback is treated as neutral — GPS hardware is still broken (do not reset the failure counter), but usable data exists (do not trigger aggressive backoff either).
The consumer looks like:
when (outcome) {is FreshGps, is WakeProbeSuccess -> reportGpsSuccess()is CellFallback -> { /* GPS broken but we have data */ }is StaleLastLocation, is TotalFailure -> reportGpsFailure()}An unexpected race condition
I had multiple independent trigger paths requesting GPS concurrently. Two of them fired within 33 milliseconds of each other. Both read the same getLastLocation(), both passed the stationarity filter, and both inserted a GPS reading. The result was two identical readings 33 milliseconds apart.
My code uses a minimum-readings-per-cluster filter to discard drive-through locations (a place needs at least 2 GPS readings to count as a real visit). The duplicate entry from the race condition defeated this filter — a single drive-by became a "cluster of 2." The fix was a Mutex around the entire processLocation path:
private val processLocationMutex = Mutex()suspend fun processLocation(location: Location) {processLocationMutex.withLock {val lastLocation = getLastLocation()// the second concurrent caller now sees the just-inserted// location and correctly skips as duplicate}}Additional note on dependency versions
I was using play-services-location 21.0.1 for months. Upgrading to 21.3.0 resolved some GPS reliability edge cases I had not yet identified. If you are doing background location work, it is worth checking whether your dependency version is current.
Summary
getCurrentLocation() can hang indefinitely on OEM-throttled devices. Always wrap it in withTimeoutOrNull. Build a priority fallback chain through all available location sources. Consider a brief
wake probe for GPS hardware recovery. Return an explicit outcome type so callers know the quality of data they received. If you have multiple GPS trigger paths, serialize them with a Mutex.
I have only tested this on Honor. I would be interested to hear whether anyone has observed similar GPS hardware suspension on other manufacturers.
https://redd.it/1s028ty
@reddit_androiddev
Reddit
From the androiddev community on Reddit
Explore this post and more from the androiddev community