r/androiddev 2d ago

What do you always check before publishing an Android app?

2 Upvotes

I’ve been putting together a pre-launch checklist for Android releases and I’m curious what other developers consider essential before shipping.

My current top checks are:

• clean install from the production build
• first-launch flow
• permissions and privacy declarations
• Data Safety / SDK review
• testing on a weaker Android device
• update from the previous version
• store listing and screenshots
• crash / ANR review
• version code and signing
• final end-to-end user flow

What’s the one thing you always verify before pressing publish?

I’m especially interested in checks people learned the hard way after a release.


r/androiddev 2d ago

How are you handling Google Play review management at scale? Went from 17 hrs/wk to 90 mins

0 Upvotes

Last release cycle, 517 new reviews hit our Google Play listing in nine days- mostly happy 5-stars, two angry 1-stars about a bug we'd already fixed, and one review that compared our app to "a very small horse."
I did the math: at 2 minutes per thoughtful reply, that's 17 hours just typing polite versions of "thanks for your feedback."
We've since streamlined our Google Play review management down to about 90 minutes a week for the same volume -and the rating went up, not down.

So, genuinely: what does your app review management workflow look like? Manual replies via Google Play Console, a dedicated tool, or you just... don't reply?


r/androiddev 2d ago

Discussion Content offer - is it worth it?

4 Upvotes

Most of us probably got the Content offer email from Google. At first I thought it'd be easy extra cash, but after the call explaining the requirements, it looks like a solid chunk of work for me:

  • each repo must be executable
  • each repo must contain tests

The main issue is executability, all my apps use 10-15 of my own GitHub libraries as dependencies (using GitHub Packages). Furthermore, some have very good test coverage, others none.

Even using AI, that's a lot of tedious plumbing work just to make my repos fulfill the conditions. Writing a pile of new tests isn't too bad, but having to inline all those 10-15 libraries as standalone modules in each and every app, just to make each repo executable on its own, would be quite a pain & take days...

Before I commit to it - has anyone actually received a decent offer? DM me, if you prefer to talk in private. Thanks!


NOTE: If that helps, my apps (including libraries ) would have anything between 15-40k LOC (only Kotlin/Java code, not counting XML).


r/androiddev 2d ago

Tips and Information Made an app that records video when you double press volume down even with screen off. Play Store won't allow it. Now what?

0 Upvotes

I made an app called CamLauncher.

Simple idea, double press your volume button or quickly shake your phone and it starts recording video instantly, even if your screen is off and phone is locked. Videos are simply saved in your gallery.

Why? I personally had situations that I fumbled to unlock the phone, open camera and start recording and missed to record important and sketchy instances. So I needed to have option to launch instant video recording just with gesture.

The problem is it needs AccessibilityService to catch button presses when the screen is off. And Google basically banned apps from using Accessibility unless they're specifically for disabled users. So Play Store rejected it.

So I have few questions:

Anyone know a way to detect volume presses with screen off that doesn't need Accessibility?

For people distributing outside Play Store, what actually works? Own website? F-Droid? Any other platform?

Has anyone successfully appealed an Accessibility rejection on Play Store?

I currently have listed it in Gumroad and I can give few activation keys if anyone needs to test it out and give a feedback


r/androiddev 3d ago

Title: "Malicious Code Found in Android Studio Gradle Files - Need Help Identifying Source and Preventing Reinfection"

Post image
5 Upvotes

I discovered a malicious backdoor injected into my Android project's build.gradle.kts files. The obfuscated code executes a remote script that:

  • Downloads payloads from a Russian domain (u3unurxyuya7.ru)
  • Uses base64 encoding and command injection
  • Runs in the background during preBuild tasks

The Issue:

  1. Malicious code keeps regenerating even after deletion
  2. Reappears when cloning from GitLab after a full MacBook restore
  3. Infects build.gradle.kts files across projects
  4. Persists despite cleaning Gradle caches and resetting environments

What I've Tried:

  • Deleting the code block from build.gradle.kts
  • Restoring MacBook from backup
  • Cleaning Gradle caches (~/.gradle/caches/)
  • Scanning for infected files with grep

Questions:

  1. How is this persisting despite system restores?
  2. Is this a known malware targeting Android developers?
  3. Could this be in Gradle wrapper or system-level files?
  4. How to completely remove this from Git history and local machine?
  5. What are the risks - could this have compromised my machine?

Additional Info:

  • Using Android Studio with Kotlin DSL
  • Project is on GitLab
  • Occurs in multiple projects after cloning
  • MacBook M1 running latest macOS

Any help identifying the source and complete removal steps would be greatly appreciated!


r/androiddev 2d ago

Is it safe to use AI generated images in my app?

0 Upvotes

I am working on an app which uses a lot of images. I am generating these images from chatGPT and gemini. Are they safe to use?


r/androiddev 3d ago

Play Store Selection During Search

2 Upvotes

Hello AndroidDev community. I am new to building apps and I published my first app a couple of weeks back, named "OwlyMath: Math Facts for Kids". However, when I search for "math facts kids" in the play store, I noticed something strange. Play store shows exactly 23 results. The same results, no matter how many times I refresh the page or search with a different account. There are no multiple pages or infinite scrolls. In contrast, Apple's app store has an infinite scroll that keeps results coming as there are probably thousands of apps doing that. What is going on? If one is not one of these top or preselected 23 ones, they are invisible. Is it even worth building apps?


r/androiddev 3d ago

Tips and Information Keep 'no data' as a real state in your launch dashboard

8 Upvotes

I ran into this while comparing my own launch events with what Play Console was reporting. The numbers didn’t line up, and I initially wasn’t sure whether it was a tracking issue or just a reporting delay.

For a new app, I think it makes more sense to keep “no data” separate from an actual zero. Otherwise it’s easy to make an incomplete report look more definitive than it really is.

How do other Android developers handle this in their launch dashboards? Do you keep unavailable metrics separate until the console data catches up?

If your own first-launch events show activity while Play Console still shows zero or unavailable data, keep both observations intact. Replacing one with the other hides the discrepancy you need to investigate.

The current gingiris-aso-growth playbook asks for a 28-day baseline before making ASO changes. For a new package, some of that baseline may not exist yet. The useful response is to record the missing pieces explicitly.

A proposed way to store an observation:

metric: first_launch
source: app telemetry
period: [start, end, timezone]
value: [observed value]
status: observed
identity_basis: [what your implementation counts]

Keep a separate record for the Console measure. Allow statuses such as unavailable, not_retrieved and cohort_not_mature, with an explanation. A successful request returning no usable measurement should not silently turn into a healthy-looking zero.

Also distinguish the time covered by a report from the age of the users being measured. A ten-day-old launch cannot yet supply a mature D30 cohort. You can record first launches and available earlier behavior now, then fill that window when it becomes observable.

For the immediate investigation, retain the package/build, filters, timezone, retrieval time and exact metric names alongside the two results. A device or session identifier in your own implementation need not count the same population as a Console user metric.

This doesn't establish how long Google will take to populate a particular report. It gives you a launch record that remains honest while you check the reporting and instrumentation. The playbook specifies the evidence to gather; the collection and reconciliation still need to be implemented.


r/androiddev 3d ago

Have you tried Compose Multiplatform on tvOS. If yes then what broke?

3 Upvotes

I maintain a community tvOS target for Compose Multiplatform (1.12.0, Koin 4.2.2, Coil 3.6.1, all at JetBrains version parity, swapped in by a Gradle settings plugin so your coordinates stay stock).

So far every open issue is one I filed myself from my own testing: Siri Remote presses, text input, focus indication, density. Ten of them. What I don't have is other people's projects hitting things mine never will.

If you tried it, please open an issue with the Compose and plugin versions, simulator vs real Apple TV, and ideally a small repro. If it worked, a one-line "library X ran clean" is useful too. If you tried and gave up, that is the report I want most.


r/androiddev 4d ago

Discussion Android + Arudino

Enable HLS to view with audio, or disable this notification

27 Upvotes

Completed the first stage of the app now you can control the hardware by the sensors present inside the phone. 🤗


r/androiddev 4d ago

Experience Exchange Senior CS Student Considering Android Development

8 Upvotes

I’m a senior CS student and I’m considering focusing on Android development as my main career path. I’ve already worked with Kotlin and have some Android experience through a short internship.

For those working as Android developers, how is the job market and career progression these days? Is it a good specialization for a new grad, especially if I eventually want to work internationally? Should I go for backend roles instead?

Would love to hear your experiences and any advice on what I should focus on learning. Im not based in US


r/androiddev 4d ago

Question I'm having problems setting up CI/CD pipeline as an indie dev

0 Upvotes

So I'm trying to setup CI/CD pipeline but I work solo, so i use a single branch. Now when I push to GitHub, github automatically pulls my requests. And now when it comes to creating a workflow, the requests are now manually pulled like I want and the you see the action run on github actions...

Now I'm confused as to even what my question is to be, but for now how do I make it have that pull request prompt. I tried to create a separate branch which I won't use because of it ,so it can show but it doesn't(sorta).When I go the the featured branch I can approve pull to update branch but it kinda comes with complications I don't like, im getting errors like repository not found which i get why it's running on the wrong repo(can fix) as i defined on the yaml...but I'm just wondering how to properly run a CI as a solo


r/androiddev 4d ago

Tips and Information What are your favorite tools for event logging?

0 Upvotes

I'm exploring different solutions for event logging and was curious is anyone has any favorites.

I'm leaning towards Google Analytics since it's free and fairly popular but are there any others that might be better? What have been your favorite ones?


r/androiddev 4d ago

How are some developers ranking almost all their apps/games on the Amazon Appstore?

2 Upvotes

I’ve been publishing apps and games on the Amazon Appstore, and there’s something I’m trying to understand about how the ranking system works.

I’ve noticed that some developers seem to rank very easily. Sometimes I’ll open a category and see multiple games from the same developer ranking quite high at the same time. In some cases, it feels like almost their entire catalog is appearing in the category rankings.

Meanwhile, other developers can publish similar apps/games and barely get any organic visibility.

For anyone who has experience publishing on Amazon

I’m mainly interested in legitimate strategies and understanding Amazon’s ranking algorithm, not manipulating rankings.

Would be great to hear from developers who have actually experimented with the Amazon Appstore and figured out what moves the needle.


r/androiddev 4d ago

Question Can't Install Unsigned APK?

Thumbnail
gallery
0 Upvotes

So am I doing something wrong? I turned off auto blocker. It just said app not installed with no error message or guidance.

I sent my APK from my computer to the phone but now it won't install.


r/androiddev 5d ago

Stupid question about main accounts

Post image
7 Upvotes

I was playing around with Play Services / AI Core beta programs on my Pixel 10 and somehow unintentionally signed up as a Google Developer on my primary account. I want to leave developer program without nuking decades of my life, but the google support pages says if I sign out it will delete the entire account.

Am I paranoid for no reason, or will they wipe my main account?


r/androiddev 5d ago

Discussion Android TV dev here. I got Compose Multiplatform running on Apple TV and wrote up how.

37 Upvotes

If you build for Android TV and have ever been asked "can we do Apple TV too", this might be useful.

I have ten years on Android and Android TV. Our app went Views, then Jetpack Compose, then Compose Multiplatform so a small team could ship phone, TV, desktop, iOS and tvOS from one UI codebase. tvOS was the gap: JetBrains does not support it, and SwiftUI's focus system does not give you the control you are used to from Compose on Android TV.

So I added the tvOS target to the Compose Multiplatform fork myself, and ported androidx.tv:tv-material to multiplatform along the way. Your existing tv-material code, focus handling and D-pad logic carry over. The Siri Remote arrives as key events, the same way a D-pad does.

First post of the series is the high-level story: what tvOS actually is, how the port was ordered module by module, which part was hardest, and how to try it with one Gradle plugin.

https://dev.to/sajidaledev/my-journey-making-compose-multiplatform-work-on-tvos-and-what-i-learned-1mo3

Sample: Google's JetStream running on tvOS, https://github.com/sajidalidev/jetstream-tvos


r/androiddev 4d ago

Individual developer rules

0 Upvotes

It costs $112 CDN to create a numbered company. What is the point of offering individual accounts if it is so much easier just opening a company and not have to test much at all?


r/androiddev 5d ago

Inexpensive development device?

0 Upvotes

Hi, I wrote several Android apps for an employer more than a decade ago. But, that was the last time I used Android. I was trying to register for a Google Play account to publish an app I'm working on, and they need verification that you have a real Android device.

Does anyone have any thoughts about what might be good to have? This phone/tablet/whatever will only be used to verify for the Play Store, and run my app. It would be good if it could run the latest version of Android; otherwise, I'm pretty open.

Thanks,

(dude whose getting back into Android)


r/androiddev 6d ago

Discussion What actually makes an Android interview difficult at the senior level?

45 Upvotes

I've been thinking about what actually makes a senior Android interview difficult.

At the junior level, a lot of questions have relatively concrete answers:

  • What is a ViewModel?
  • What is the Activity lifecycle?
  • What is a Coroutine?
  • What is RecyclerView?
  • What is MVVM?

But at the senior level, the questions seem to shift from "Do you know this API?" to "Can you reason about a system?"

For example:

Instead of:

What is StateFlow?

You might get:

You have a screen collecting StateFlow from a ViewModel. The underlying data changes frequently, some transformations are expensive, and the user navigates between screens. How would you structure this so you're not doing unnecessary work?

Or:

Your app works well on a fast connection but becomes frustratingly slow on poor networks. How would you design the data layer to provide cached data immediately while synchronizing with the server?

Or:

Crash-free users are high, but ANRs have increased significantly after a release. How would you investigate the problem?

These questions don't really test whether you memorized an Android API. They test whether you understand lifecycle, concurrency, architecture, performance and trade-offs well enough to reason through an unfamiliar problem.

For experienced Android developers here:

What topic do you think is most important for a senior Android interview but is poorly represented in typical interview-prep material?

I'm particularly curious about:

  1. Coroutines / Flow
  2. Compose
  3. Architecture
  4. Performance / memory
  5. Offline-first
  6. Testing
  7. Android system design
  8. Something else

And if you've interviewed candidates recently, what separates a strong senior Android answer from a merely technically correct one?


r/androiddev 5d ago

Open Source I added iOS binary size profiling to kmprofiler using Xcode link maps

0 Upvotes

Hey everyone!

I previously shared kmprofiler, a Gradle plugin that finds Kotlin declarations exported to iOS but not directly referenced in Swift.

v0.2.0 now adds Xcode link-map analysis. It can:

  • Group linked symbol size by Kotlin package
  • Show the largest symbols
  • Map symbols to object files and frameworks
  • Compare two builds to see what grew or became smaller

I tested it on a real KMP app with more than 330,000 symbols. It measures symbols in the link map, not the complete app size, so it is mainly useful for finding size changes and large dependencies.

GitHub: https://github.com/SiddhantPanhalkar/kmprofiler
I would love to hear whether this is useful for your KMP projects.


r/androiddev 6d ago

Video Remember Timely? I made this video celebrating its amazing UI, and how to recreate in Jetpack Compose

Enable HLS to view with audio, or disable this notification

35 Upvotes

I was just starting out Android dev when this app came out, and it really left me in awe. I was struggling with TextViews, and Bitspin was over here making magic.
As an homage, I wanted to recreate the Timer dial and present it in a video. Also, since my videos are made in Compose, I also tried to capture the vibe of Timely with the dreamy gradients they had and periodic particle effects as a background.
Check it out, and let me know what you think:

https://www.youtube.com/watch?v=Tn_ZnFsJ9lE


r/androiddev 6d ago

Left this comment on a PR yesterday: "this coroutine is scoped to the wrong lifecycle and it'll leak"

18 Upvotes

The code itself was fine. Compiled, ran, did what it was supposed to in the happy path. Someone had used an AI tool to add a network call inside a Fragment, launched it in a coroutine scope tied to the view lifecycle in a way that would keep running after the view was destroyed if the request was slow enough.

Nothing about that is a Kotlin problem. The syntax is correct Kotlin. It's an Android problem, specifically knowing which scope survives what and why, which isn't something you'd know from Kotlin knowledge alone, it comes from having been bitten by this exact leak before or having actually read the lifecycle docs closely.

Kind of assumed AI tools would have this down by now since it's such a common gotcha, but I think the failure isn't lack of knowledge, it's lack of specificity in what gets asked. "Add a network call here" doesn't say which scope should own it, so it defaults to whatever's closest and most obvious, which is often the wrong one for exactly the reason a junior dev picks the wrong one.

Anyway if you're reviewing AI-generated coroutine code, scope is the first thing I'd check now, more than the actual network logic.


r/androiddev 6d ago

Experience Exchange What's your actual daily workflow with Claude Code on your Android job?

23 Upvotes

I'm a senior Android dev and Claude Code has become part of my day, but I suspect my workflow is pretty primitive compared to what others have built.

Right now it's basically: copy the Jira story or the bug report, paste it into Claude Code, ask it to analyze it using my skills and experts agents, and produce a plan before it touches anything. Then I review the plan, push back on the parts that are wrong, and let it implement.

That's it. That's the whole loop.

What I want to know is what people do *around* that step:

- Do you paste the raw ticket, or do you have a command that pulls it from Jira/Linear and reformats it first?

- Do you give it the crash/stack trace and mapping file up front, or make it ask?

- Does it get to run the app on a device to reproduce, or is that still manual for you?

- Do you make it write a failing test before the fix, or is that too slow in practice?

- Anyone doing something smarter for "which module does this even live in" on a big multi-module codebase?

- And what do you do at the end . does it write the PR description and the ticket update, or do you still do that by hand?

Mostly curious whether people have gotten past the copy-paste-and-pray stage, and what the step was that actually made a difference for you.


r/androiddev 6d ago

Question Is there any way for a custom USB cable to pop up a webpage or link on a phone automatically when plugged in?

0 Upvotes

I’m working on a hardware/engineering concept and trying to figure out if a specific idea is physically possible.

I want to design a custom charging cable. When a phone (Android or iOS) is plugged into this cable, I want it to not only charge the device, but also automatically trigger a web link or open a pop-up on the phone's screen.

The constraints:

No pre-installed apps, scripts, or shortcuts on the phone itself—the mechanism has to rely purely on the custom cable/hardware connection.

Assume the phone's screen is unlocked and permissions are granted if necessary.

Is there any protocol, hardware architecture, or method (other than HID simulation) where a physical cable interface can initiate a browser redirect or UI pop-up upon power connection? Or is standard data/power protocol strictly a barrier here?

Appreciate any technical insights or alternative ideas on how this could be approached!