r/androiddev • • 5h ago

Question Android Screen Input Area Question

0 Upvotes

Hello! I'm a little stumped about this because while I do code for work, I'm no android developer, so I'm taking a shot here to see if someone could help with this problem.

So I have these two devices that I'm trying to get to work as intended.

Veikk VK430 - It's a 4:3 aspect ratio screenless drawing tablet with android compatibility in portrait orientation.

Anbernic RG Rotate - An Android 12 handheld gaming console with a 1:1 aspect ratio. The screen is 720x720 and 3.5" with a DPI of 290.

So what's going on here is that when I connect the two devices, the tablet is able to map the whole screen from corner to corner on the handheld, but since the aspect ratios are different, tracing a coin on the tablet will result in an oval on the screen.

I've tried to see if turning the screen into a 540x720 (largest 4:3 aspect ratio I can get on the rotate) using adb shell wm size 540x720 would do the trick, but the tablet is still recognizing the screen as a 720x720. If this were Android 11, I'd have tried wm overscan, but it's not an option anymore.

Is there anyway I can adjust the screen's input area to 540x720? Technically I can still draw on the rotate for fun as is, though it's going to mess up my circles, or I can just do the more reasonable thing and draw on an actual computer...But now I'm kind of invested.

Any tips for me here?


r/androiddev • • 9h ago

Open Source Vitrine Studio - Store Screenshots with MCP and CI/CD (open source)

1 Upvotes

Hi everyone,

I’m an indie developer, and for years, creating screenshots has been part of the release process that I’ve always found a bit of a chore. The commercial tool I used so far was slow, clunky and had no MCP.

So I built Vitrine Studio: a 100% free, open-source desktop app (macOS, Windows, Linux) for App Store and Google Play screenshots. You design one continuous canvas, and Vitrine renders it for every language, device size and store.

MCP: Vitrine has a built-in MCP server, so AI agents can build complete screenshot sets for you – layout, copy, translations, validation, export. You watch the changes live in the editor, the agent renders previews to check its own work, and you only step in if something needs a personal touch. Most of the templates in the gallery were designed this way.

CI/CD: A headless CLI validates, exports and uploads directly to App Store Connect and Google Play – with a container image, fastlane support and reports for GitHub/GitLab. Validate on every PR, export as a build artifact, upload from your release job. Projects are plain YAML + images, so they live in Git next to your code.

- Website & docs: https://www.vitrinestudio.app
- GitHub: https://github.com/vitrinestudio-app/vitrine
10-min demo: https://youtu.be/iJGoFLsSL_M (sorry for the English dub, next time I speak by myself)

I'd love to hear what you think, especially about the agent workflow and what you'd need to drop it into your pipeline.


r/androiddev • • 9h ago

Kotlin 2026: Layoffs, AI, Google — Is the Golden Age Over? Jake Wharton Explains

Thumbnail
youtu.be
1 Upvotes

r/androiddev • • 10h ago

Article Android silently downgrades long-running BLE scans after 5 minutes: measurements, logcat and AOSP links

Post image
0 Upvotes

I’ve been fighting background BLE beacon scanning on Android and wrote up what I measured on a Samsung (Android 14, One UI 6.1). Short version:

  • A filtered LOW_LATENCY scan gets silently downgraded to LOW_POWER after scan_timeout_millis: 300 s on my device (AOSP default was 30 min, 10 min on Android 15+). Detections dropped from ~80/min to ~10/min. No callback, no error, just Moving filtered scan client to downgraded scan in logcat.

  • An empty ScanFilter is treated as no filter: with the screen off the scan is suspended and you get ~0 results.

  • The quota of 5 starts per 30 s: the 6th startScan was rejected, and onScanFailed was never called.

  • With a Foreground Service, turning the screen off didn’t kill the scan by itself. The timeout did.

  • Restarting the scan every 4 min through a single start counter, plus a silence watchdog, kept it at ~90/min with the screen on and ~48/min with the screen off.

Full write-up with code and AOSP links (my article): https://medium.com/@9hamden/your-android-ble-scan-quietly-dies-after-5-minutes-and-you-dont-even-know-it-5e603c493177

Curious what you see on your devices: what does adb shell device_config get bluetooth scan_timeout_millis return? Especially Pixel, Xiaomi and OnePlus.


r/androiddev • • 11h ago

Open Source Castwire: a Cast sender for Android with no Play Services and no Media3 dependency (API 24+)

3 Upvotes

I extracted the Cast stack from an app I maintain and published it as a library: Castwire. It finds Chromecasts, Google TVs and other Cast devices and plays media on them without Google's Cast SDK or Play Services.

The Android artifact is castwire-android. You create it with AndroidCastwire.create(context). It is a regular Android library (minSdk 24, Java 8 bytecode). The AAR declares INTERNET, CHANGE_WIFI_MULTICAST_STATE, ACCESS_WIFI_STATE and WAKE_LOCK. During discovery it holds the multicast lock; while a session is open it holds a Wi-Fi lock and a partial wake lock, because the TV often plays through a small HTTP relay on the phone (local files, links that need headers, cookies, this device's IP, or CORS).

The library does not include a foreground service and does not depend on Media3 or ExoPlayer. Dependencies are kotlinx-coroutines, kotlinx-serialization-json and OkHttp. You keep the process alive yourself, the usual way, with a mediaPlayback foreground service, and you keep using whatever player you already have on the phone.

val castwire = AndroidCastwire.create(context)
val tv = castwire.discover().first()
val session = castwire.connect(tv)
session.load(CastMedia(
    CastSource.Url("https://example.com/movie.mp4", "video/mp4"),
    MediaMetadata(title = "Movie"),
))
session.pause(); session.seek(90_000); session.setVolume(0.4f)

Separate video and audio streams can be joined into a DASH manifest on the device. Live HLS playlists can be rewritten and relayed. There is also CastDevice.at(ip) if you already know the address, and you can launch a custom receiver by app id.

License is AGPL-3.0, with a commercial license if you need to use it in a closed-source app. This is 0.1.0. The coordinates the build is set up for are io.github.biolend83:castwire:0.1.0 and io.github.biolend83:castwire-android:0.1.0, but they are not on Maven Central yet, so for now clone the repo.

https://github.com/biolend83/castwire

It came out of TubeHaus, a YouTube client I build: https://github.com/biolend83/tubehaus


r/androiddev • • 13h ago

Native Vulkan Ar / 3d Viewer for android : Hybrid Raster and ray traced gems.

20 Upvotes

Hi..
I am in the process of making an ar viewer in vulkan for android to run natively.

For rendering i am following a hybrid structure mixing Raster IBL approximations and path tracing, the gems are traced with tracing the ray directions and metals with split sum approximations and only traced for inter reflections once the movement stops.

The engine is general purpose focusing on jewellery embedded in an sdk to integrate with 3 lines of kotlin.

The c++ engine takes care of initializing the context based on the hardware capabilities like vulkan 1.1 support, hardware RT cores and compute path fallbacks.I have tested on mali, adreno and xclipse(Exynos) gpus.

Most of the optimization i did are around the memory and cache coherency on mobile gpus, since last couple of years got really obsessed with graphics maths and its implementations but i come from c++ background so pls let me know about the visuals of the same and how can i improve further.

It is closed source for now but happy to share any details to any one interested.

Thanks


r/androiddev • • 19h ago

Question Clarifying Google Play Console Internal vs. Closed Testing (14-Day Requirement) & Tester Opt-In Issues

0 Upvotes

Hi everyone

I am preparing my first Android app for release on Google Play Console and ran into a few questions regarding the testing tracks and the mandatory 12-tester / 14-day testing period:

- Internal Testing vs. Closed Testing URLs: Following the initial dashboard steps, I published a release to the Internal Testing track and shared the link with my testers. After completing the Store Listing steps, I also set up a Closed Testing release and noticed it uses a different opt-in URL. Since the final production checklist states that the testing period must be completed in Closed Testing, does time spent in Internal Testing count toward the requirement, or do I need to migrate my testers to the Closed Testing link?

- Internal App Sharing: I enabled Internal App Sharing in the settings. How does this differ from the Internal Testing track, and does it affect the release process?

- Play Store Errors for New Testers: When I add new users to my tester email list and share the link, some of them encounter an error or see a completely blank page when redirected to the Google Play Store, despite using the correct Google account. Occasionally it works if they retry a minute later, while for others the issue persists. Is this a propagation/caching issue, or is there a specific step I might be missing?

Thanks in advance for your help!

Edit: Thanks for your help👍🏼


r/androiddev • • 22h ago

Question best approach to creating a new dev account , personal vs LLC?

1 Upvotes

hello guys.
am working on some games and today I came a cross some info about having to have 12 testers for the personal dev account and I read it can risk my personal assets in the case of some law suite.
mean while running an LLC seems the better choice but registering with D&B can be tricky as using an agent or virtual office address will probably be declined.

so should I just register a normal LLC with my home address as it is the easiest , cheapest, and more guaranteed way? or how do you guys go through about this. (US based and LLC is cheap to register in my state)

any info from people who were in my situation and what they chose and why will be appreciated.


r/androiddev • • 1d ago

Question How do I find slow spots in a single function?

3 Upvotes

So I have this one somewhat critical function that I want to be fast. I want to profile it with either method tracing, or callstack sample, to find what I can optimize in it. I've got two issues:

  • If I just run profiling in Android Studio, I'm getting a humongous file (>300MB) as I'm trying to get the method to run in a realistic scenario. It's not run often, and to trigger it I must do things that run a lot of other code.

  • This function is called from multiple places and multiple threads. Ideally, I would like to see the statistics for it, such as the flame chart, as a single entity. Instead, in the charts I see it in multiple places.

To overcome these issues, and primarily the first one, I would like to have profiling enabled as I enter the function and disabled as I exit it. Sounds simple? Well, I couldn't find a sensible way to do this. There are methods such as startMethodTracingSampling which work.. but they create a new file for invocation, while what I want is some aggregate statistics. And this file is on the device so I have spend some effor getting it from there.

Otherwise, I'm left with dealing with the humongous trace files. My computer can handle those, but again, very slowly, and finding my method of interest takes so much time that comparing the impact of code changes is just not viable.

Is there sensible way to quickly profile a single method? Or am I stuck with the above options?


r/androiddev • • 1d ago

Live performance for Android apps in your terminal!

1 Upvotes

r/androiddev • • 1d ago

Built a native Android XR spatial terminal with Jetpack Compose, Gemini 1.5 Flash, and a life-sized 3D AI companion (A.E.G.I.S.)

Thumbnail
gallery
0 Upvotes

Hey r/androiddev! I’ve been building ChromaTerminal XR, a next-generation spatial developer shell and 3D holographic AI assistant engine built entirely on the new Android XR SDK (androidx.xr.compose:1.0.0-beta02).💪

The main engineering challenge was handling complex 3D assets (anime_companion.glb) and real-time spatial windowing while maintaining a strict 90 Hz refresh rate and <14ms motion-to-photon latency.🚀

Architecture Highlights:

  • Spatial UI & SceneCore: Uses Subspace layouts, SpatialPanel, and Orbiter containers with real-time 6DoF floor anchoring.

  • AI Routing Core: An asynchronous coroutine pipeline (TerminalAIManager) powered by Gemini 1.5 Flash that maps natural language responses (<SYS>, <CODE>, <MSG>) directly into spatial UI elements.🤯

  • Developer Experience: Implemented LocalInspectionMode.current checks so developers can preview and render layouts safely on non-GPU desktop environments without crashing Android Studio Compose previews.

I’ve mapped out enterprise workflows for it across cybersecurity SOCs, medical telemetry, and education. Would love to hear your thoughts on the architecture or answer any questions about the Compose XR API!

Check out the full pitch deck breakdown attached. Roadmap targets Google and Meta XR developer enrollment for Q2 2027. I will be thrilled with your response; source code,links and contacts at https://github.com/murayijacquiline-max and email: [email protected]


r/androiddev • • 1d ago

Google Play developer account verified in my home country, then moved to Canada—should I update my details?

1 Upvotes

Title: Moved to Canada after verifying my Google Play developer account—should I update my details?

Hi everyone,

I opened my Google Play developer account in 2022 and verified it using my home country’s address. I moved to Canada, but my account details still show my original address and country.

Should I update my developer account details to reflect my current Canadian address? Has anyone gone through a similar move and updated their details? Did it require additional verification or cause any issues with your account, published apps, or payments?

I want to keep everything compliant and avoid problems down the road. What would be the best way to handle this?

Thanks!


r/androiddev • • 1d ago

Is Google Play currently slow at replying to tickets about inappropriate reviews by users?

0 Upvotes

Asking because they used to reply within 48 hours, I've waited more than double that on two tickets now. Could it be the quota that they mention when you flag a user review for consideration?


r/androiddev • • 1d ago

Android Developers with 2–3 Years of Experience, How Are You Preparing for Your Next Career Move?

12 Upvotes

I have around 2.8 years of experience as an Android Developer, and I'm currently planning to switch companies. However, for the past six months, I haven't been receiving many interview calls. Even when I do get interview opportunities, I struggle to clear more than one or two rounds.

At this point, I'm stuck in a loop of figuring out where I should start and what I should focus on.

Should I start learning Jetpack Compose or Flutter? Or should I focus more on strengthening my existing Android skills and gaining a deeper understanding of the features I've implemented in my projects?

Another major concern is my reliance on AI-assisted development (vibe coding). To be clear, I'm not simply copying and pasting code. I understand the logic behind most of the implementations and know how things work, but I haven't developed the habit of writing everything independently from scratch.

Because of this, I sometimes struggle to take full ownership of the projects I've worked on. I'm also unsure how deeply interviewers might question me about my project implementations, and this makes me hesitant when attending interviews.

To be honest, my confidence has been dropping day by day, and I'm finding it difficult to figure out the right direction for my career preparation.

For those who are currently working as Android Developers or have recently switched jobs:

  • What skills and technologies should I focus on with 2–3 years of experience?

  • Should I prioritize mastering core Android concepts, learning Jetpack Compose, or exploring Flutter?

I'd genuinely appreciate your honest opinions and suggestions. I'm looking for practical guidance to help me get out of this phase and move forward in my career.


r/androiddev • • 1d ago

Open Source Lessons from shipping one Compose Multiplatform codebase to Android, Android TV, Windows, macOS, Linux and iPad (plus writing my own YouTube client and Cast stack)

Thumbnail
github.com
5 Upvotes

For the last few months I've been building an open-source YouTube client in Kotlin. One codebase covers Android phones, Android TV, Windows, macOS, Linux and iPad, with almost all of the UI in a shared Compose Multiplatform module. A few things I learned that might save someone time:

  1. "It's fast on my phone" hides main-thread work that TV boxes can't handle. A user's TV box froze, the D-pad stopped responding, then the app crashed. Oddly, it only happened after the first launch: clearing app data fixed it once. The cause was JSON parsing of YouTube's (large) responses, plus ranking the home feed against watch history, both on the caller's dispatcher. On a fresh install there's no history, so it's cheap. A few days later it isn't, and a slow ARM box can't keep up. Moving the parse and the ranking to Dispatchers.Default cut skipped frames roughly in half on the emulator. The general lesson: test with a realistic amount of user data, not a clean install.

  2. D-pad focus is its own UI. I first tried making the phone layout "focusable" for TV. It was miserable. What worked was a separate TV layer (rail, shelves, its own player screen), sharing the same state and data but not the same composables. Two things helped most: focusProperties { onExit = { cancelFocusChange() } } to trap focus inside panels, and a small retry loop for "move focus into the page after it loads".

  3. Casting without Play Services is doable. I needed casting on desktop too, so the Cast stack is hand-written in the shared JVM code: mDNS discovery, a TLS socket to port 8009 with hand-encoded protobuf, the Default Media Receiver, and a tiny local HTTP server that feeds the TV. A gotcha: my Google TV ignored ordinary mDNS queries from an ephemeral port. It answered only unicast-response (QU) queries, or queries sent from port 5353, so now it sends all of them.

  4. Off-screen screenshots of every screen are a great review tool. ImageComposeScene on desktop renders the whole app with no window. I render every screen at phone and desktop sizes and look at a contact sheet before I push. It caught clipped titles and a Shorts layout overflowing on phones that I'd never have noticed by clicking around.

  5. Platform-only APIs go behind small interfaces, implemented natively. For example, comment translation uses Apple's Translation framework through a Swift helper on macOS and SwiftUI's translationTask on iOS. Compose only sees platform.translate(). A contributor wrote both. Watch out for availability, though: the framework needs weak linking when the app still supports older iOS versions.

The project, if you want to read the code: https://github.com/biolend83/tubehaus (AGPL-3.0, the app is on the android-app branch). Happy to go deeper on any of these.


r/androiddev • • 1d ago

Experience Exchange Almost 1,000 installs but 700+ uninstalls on my free Android app. How do I find out why people leave?

1 Upvotes

I’m a solo developer. My app makes subtitles from videos right on the phone. It’s free, has no ads, and works offline. It just crossed almost 1,000 installs on Google Play, but Play Console shows 700+ uninstalls, and I can’t figure out the reason.

Some context:

  • After installing, the user has to download a language model (a few hundred MB) before they can make subtitles. I suspect some people leave at this step.

  • Making subtitles takes a few minutes for longer videos, and the app has to stay open.

  • The rating is good (4.7), and the people who stay seem happy, so it’s mostly silent uninstalls.

  • I have Firebase Analytics and Crashlytics, and the crash-free rate is above 99%, so crashes don’t seem to be the cause.

My questions:

  1. How do you find out why users uninstall? Is there a way to see at which step they drop off before uninstalling?

  2. Is a ~70% uninstall rate normal for a utility app that people use for one job and then remove?

  3. Has anyone tried an exit survey, or something similar, that actually worked?

Any tips on what to measure in Play Console or Firebase would really help. Thanks!


r/androiddev • • 1d ago

Weekly releases might be hurting your Android app's performance

Thumbnail
measure.sh
74 Upvotes

I recently found out that if you ship Android app updates every week. Your app's performance could suffer if you're not using good Baseline Profiles. In this article I get into why this happens.


r/androiddev • • 1d ago

Live Play Store app with approved Accessibility Service triggers Google Pay "suspicious app" warning. How to resolve?

Thumbnail
gallery
3 Upvotes

Hi everyone,

I recently published my Android app, Intent – Quit Phone Addiction, on the Google Play Store.

The app uses Android's Accessibility Service exclusively for its core productivity functionality: blocking distracting applications during user-defined focus sessions.

A few important details:

  • The app is publicly available on Google Play.

  • It passed Google's Play Store review and is compliant with Accessibility Service policies.

  • Accessibility usage is explicitly disclosed to users.

  • Users manually enable the service and grant the required permissions.

  • The service is not used to read financial information, capture credentials, perform transactions, or interact with payment apps.

The problem:

When Google Pay (GPay) is opened, it displays the following warning:

"Payments blocked. Some apps have permission to make payments, take action."

It instructs users to disable Accessibility Services for all apps and restart their devices before making payments.

This happens even though Intent is a legitimate productivity application downloaded directly from the Play Store.

My questions:

  1. Has anyone experienced a similar issue with Google Pay or other UPI applications?

  2. Does Google Pay maintain its own list of Accessibility Services that it considers risky, independently of Google Play's app review?

  3. Is there any way for legitimate apps using Accessibility Services to get reviewed or allowlisted for compatibility with financial applications?

  4. Is this related to Google Play Integrity, Play Protect, or Google's separate fraud-detection mechanisms?

  5. Are there any recommended implementation changes that could prevent this false positive without removing the core Accessibility functionality?

I understand why financial apps have strict security checks, and I fully support those protections. However, it seems problematic when legitimate, Play Store-approved productivity apps cause payment restrictions.

App: Intent – Quit Phone Addiction Play Store: https://play.google.com/store/apps/details?id=com.intent.focus

I've attached screenshots showing the Google Pay warning and the app's official Play Store listing.

I'd really appreciate insights from Android developers, Google engineers, or anyone who has dealt with a similar issue.

Thanks!


r/androiddev • • 1d ago

Tips and Information Can an Android app allow users to receive voluntary donations?

0 Upvotes

Hi everyone,
I’m working on an Android app where users can create and share their own content. I’m considering adding an option that would allow users to voluntarily support individual creators with a donation.
I’m thinking about using Stripe to handle the payments, but I’m not sure how Google Play would view this type of functionality.
For developers who have experience with this:
Is this generally allowed on Google Play?

Are there specific Google Play policies I should be aware of?

Can Stripe be used for this type of payment, or would Google require Google Play Billing?

Is there a specific way the payment flow needs to be structured to avoid Play Store review issues?

I’d appreciate any advice or experiences from developers who have implemented something similar. Thanks!


r/androiddev • • 1d ago

Question Receipt validation? Yay or nay?

1 Upvotes

I released an app a few days ago and have about 80 users, and see someone already hacked it to make about $1000 in in app purchases. (In game $). I don't really care because they were unlikely to make a real purchase, and in 2 days they've played more than 2 hrs. So at least they're engaged. :)

I have no leaderboards or anything, they're really just cheating themselves.

Still, receipt validation? Or skip? And why?


r/androiddev • • 1d ago

Google Play Support More testing required??

0 Upvotes

For all the apps I've built and shipped this one is ridiculous, we uploaded over one hundred versions since testing started and have at a minimum ten active players at once playing our game, i dont think anyone really reviewed my game. Its an rts game where we need multiple testers on at the same time.. this is actually pretty insane.


r/androiddev • • 2d ago

Android studio rabbit 2 patch classic code completion not working

2 Upvotes

I recently downloaded the rabbit 2 patch for Windows. Now the classic ai code completion is not working. Not the pop up auto complete intellisense stuff, but the one that tries to predict what you want to do and auto filla it in gray and you have to tab to use it.

I have turned off the Next Edit Prediction. Which is supposed to bring back the classic ai auto completion, but it does not. The NEP doesn't seem to work great either for that matter. But maybe that's just the way it is.

The classic AI auto completion worked great before this update. Maybe it's a but? I filed one here

https://issuetracker.google.com/issues/585623225

Is anyone else seeing this issue too?


r/androiddev • • 2d ago

Discussion What is your favorite technical interview question you were asked?

10 Upvotes

What question(s) hit different during a tech interview for android dev position that you still remember it

Hint: It might be a question that you didnt know the answer


r/androiddev • • 2d ago

Open Source Prevue: Compose Previews without Android Studio, in your browser

30 Upvotes

https://github.com/kakao/prevue

Why

Running a few coding agents in parallel, one worktree each, means one Android Studio per worktree just to check the Compose UI. Each one drags along a Gradle daemon and a Kotlin daemon, around 8GB. Three of those and a 36GB Mac swaps all day.

Prevue is for that. It shows your `@Preview` functions in the browser and redraws them about a second after you save. to check the Compose UI. Each one drags along a Gradle daemon and a Kotlin daemon, around 8GB. Three of those and a 36GB Mac swaps all day.

Prevue is for that. It shows your `@Preview` and redraws them about a second

Easy to start

  • Nothing to install in your project. No Gradle plugin, no build file changes

  • One skill. Run /prevue in Claude Code or Codex, tell it the file name, done. Nothing to configure (macOS only for now)

What it does

  • Hot swap : Every `@Preview` in the they all redraw on save. Change just a padding or a color and it's more like 0.2s

  • Interactive : Previews actually run. Click, drag, switch devices, fold foldables

  • Point at it : Click anything on screen and the agent reads it as a file and line. No more "the second card from the top"

  • Match a design : Give it a Figma frame or a screenshot and the agent looks at the screen itself and keeps fixing until it matches

  • Light : Each worktree gets its own small daemon, about 1.4GB vs 8.1GB for AS (measured on nowinandroid)

  • Compose Multiplatform : Works too (except iosMain)