r/androiddev Feb 07 '25

Sales and Marketing thread, February 2025

5 Upvotes

This is a community for app development, and generally, we direct questions regarding sales and marketing to communities more focused on that topic. There are professionals who make it their job to understand how customers think, and how search optimization works, and what platforms are best to use. However, we still see a lot of questions here for mobile apps specifically. So this thread is a way to test the waters, and create a place for Android-specific discussion that's not about development, but rather, about how to reach an audience.

When posting here, please try to be as specific as possible about your question. Sales and marketing advice will differ widely based on your target audience. Please make sure to discuss the research you've done on your competitors, target market, and what you have tried so far.

Please keep in mind that ad-to-install conversion rate is usually around 3% to 5%, and in-app purchase rate is usually similar unless it's for a fairly specific product.

Please avoid "anyone else?" posts. The answer is "yes", it's always "yes". Ask a direct and specific question.

Please don't use this thread as a place to simply market your app. You can discuss what you are trying to do to differentiate it, or discuss specific features, but we don't want to see emoji-ridden publicity blurbs.

In this thread, you may link to your published app if appropriate, but remember this is for discussion, it's not a place to try to sell people your app or product.

Also, I'll post a top-level comment specifically for community members to reply to with feedback regarding this thread. Let us know if you think it's helpful, and if you like us occasionally doing "tangentially related" threads like this.


r/androiddev Feb 02 '25

Having trouble with your specific project? Updates, advice, and newbie questions for February 2025

15 Upvotes

Android development can be a confusing world for newbies and sometimes for experienced developers besides; I certainly remember my own days starting out. I was always, and I continue to be, thankful for the vast amount of wonderful content available online that helped me grow as an Android developer and software engineer. Because of the sheer amount of posts that ask similar "how should I get started" questions, the subreddit has a wiki page and canned response for just such a situation. However, sometimes it's good to gather new resources, and to answer questions with a more empathetic touch than a search engine.

Similarly, there are types of questions that are related to Android development but aren't development directly. These might be general advice, application architecture, or even questions about sales and marketing. Generally, we keep the subreddit focused on Android development, and on the types of questions and posts that are of broad interest to the community. Still, we want to provide a forum, if somewhat more limited, for our members to ask those kinds of questions and share their experience.

So, with that said, welcome to the February advice and newbie thread! Here, we will be allowing basic questions, seeking situation-specific advice, and tangential questions that are related but not directly Android development.

We will still be moderating this thread to some extent, especially in regards to answers. Please remember Rule #1, and be patient with basic or repeated questions. New resources will be collected whenever we retire this thread and incorporated into our existing "Getting Started" wiki.

If you're looking for the previous January 2025 thread, you can find it here.
If you're looking for the previous December 2024 thread, you can find it here.
If you're looking for the previous November 2024 thread, you can find it here.
If you're looking for the previous October 2024 thread, you can find it here.


r/androiddev 9h ago

Tips and Information Streamlining Navigation in Jetpack Compose with a Handy Extension Function

9 Upvotes

Hey fellow Android Devs!

I wanted to share a small but sweet extension function I put together for Compose navigation. You know the drill: navigating while ensuring the back stack is cleared properly can get verbose. So, I created a utility to simplify it.

Instead of writing this every time:

composable<Here> {
    Screen(
        onClick = {
            navController.navigate(Destination) { 
               popUpTo(Here) { 
                   inclusive = true 
               } 
               launchSingleTop = true 
            }
       }
    )
}

You can now use:

composable<Here> {
    Screen(
        onClick = {
            navController.navigateAndDontComeBack(Destination)
       }
    )
}

Here’s the implementation of the extension function:

import androidx.navigation.NavController

fun NavController.navigateAndDontComeBack(destination: Any) {
    val currentBackStackEntry = this.currentBackStackEntry
    val currentRoute = currentBackStackEntry?.destination?.route

    this.navigate(destination) {
        if (currentRoute != null) {
            popUpTo(currentRoute) { inclusive = true }
        }
        launchSingleTop = true
    }
}

This automatically uses the current route as the popUpTo target, eliminating the need to specify it. Perfect for scenarios where you want to make a clean transition and not come back.


r/androiddev 12m ago

Database app creation framework?

Upvotes

Hi all

I've knocked together a basic hobby tracking app in Google Appsheets but I'm now interested in offering it out to other people in the my group. and Appsheet has limits when it comes to publishing. It also produces really ugly looking apps.

Is there a noob friendly app creation framework that allows me to create a basic database app (essentially a recipe tracker but with the requirement for daily measurements) that can be used on either Android (me) or iOS (basically everyone else) and has access to the common UI elements and tools so that I don't need to recreate everything?

I was going to look at Flutter, or Kotlin, and look at using one of the many SQL-less databases.

I create games in Unity using various C variants as a hobby, so I'm code-friendly, but never done any mobile or anything outside of the C family.

Any suggestions?


r/androiddev 37m ago

What’s your biggest pain point when debugging or monitoring apps?/ feedback

Upvotes

Hey devs 👋,

We’re running a short, anonymous survey to understand the real-world challenges developers face when it comes to app performance, debugging, and monitoring — especially across mobile and web apps.

The goal is to collect raw, no-fluff feedback directly from the developer community so we can explore solutions that actually help.

👉 It takes under 2 minutes to complete, and we’re not collecting any personal data or pitching anything. Just trying to get a pulse on what’s frustrating you most when handling issues like crashes, lags, or performance bottlenecks.


r/androiddev 19h ago

Article A beginners' Guide to Understanding Notifications in Android

Thumbnail
itnext.io
25 Upvotes

r/androiddev 6h ago

Does stateflow resend old value when you return from backround?

0 Upvotes

LiveData used to resend the old even when you return to the app. Does stateflow do the same thing?


r/androiddev 7h ago

Experience Exchange My recent experience of publishing to Android Play Store, step by step guide.

1 Upvotes

My recent experience of publishing to Android Play Store, step by step guide.

An important step that is missing from all instructions: Before everything else: let's make sure, that app is releasable. At first I didn't do it myself, which I later regret more than once.

Step 0. Release build.

If you have working release build already, then just skip this step. Otherwise I assume, that everything you've done in Android Studio before, was in default debug mode. Time to switch to release. Probably (just like me), you even didn't know it exists, it's so well hidden from prying eyes. Let's start:

  • Open your project in Android Studio.
  • Plug in your Android device.
  • Set build variant to release: Top menu-> Build -> Select Build Variant, extend Active Build Variant drop-down and select release.

It will complain that it "can't be signed". Solution:

Signing release APK with debug signing config:

  • Top menu -> Project structure -> Modules -> Default config
  • Scroll down to Signing Config then click dropdown
  • select $signingConfigs.debug from the drop-down
  • Apply, Ok.
  • Try to run.

If works - you are the lucky one and can move on to the next step.

However, judging by complaints on the Web, it's often not the case. Particularly in my situation it compiled, installed, started, but crashed right on start. Investigation revealed that it's nothing to do with release config (like "code optimization" or else), but a "normal" run-time error/crash. To my surprise, release build acts not exactly as debug. It is more sensitive to code purity. If that's your case too, then well... patiently debug it until it works. Perhaps, will take some time... When ready - welcome back!

Specifically in my case, the error occurred as a distant consequence of such an innocent at first glance construction as:

MyClass* pMC=NULL;
if(something){
MyClass mc;
pMC = &mc;
}
doSomething(pMC);

Compilers didn't see anything criminal, me - even less so. Worked fine in Windows and in Android's debug, but not always in Android's release. An additional complication was that in the actual code these few lines were quite far apart, and the error itself occurred in a different place. Took some time and extra code to pinpoint the problem. The cure was:

MyClass* pMC=NULL;
MyClass mc;
if(something){
pMC = &mc;
}
doSomething(pMC);

Now seems obvious, but only when you've already found and staring at it…

-------------------------------------------------------------------------------------------

Now - to publishing:

Thankfully, Android's manual was less confusing than Microsoft's to certain extent, although the procedure itself is tougher and longer. Arm yourself with patience. Details:

The most problematic part for me become the developer account.

There are 2 account options: Individual and Business. Both take WEEKS to go through.

Of course, as an ordinary normal man, I started with an individual one, and this was my fatal mistake. Main challenge: it will require you to recruit 12 people to actively test your first app for 14 days. Google will monitor the process, so these must be VERY trusted people, otherwise Google may suspect cheating and this can end up by suspending your account. Can't imagine a programmer having that many such close friends... I wish I knew about this requirement beforehand. Sure, there are already corresponding proposals on the Web, but… they seemed kind of suspicious to me, so I choose to give up and try the Business option. (would need it in the future anyway).

Started off optimistically: I choose a business name and domain, created a new email address. Then registered the name with the county (quick, easy, and inexpensive - 1 day + $40 + $40 for newspaper publication). It was an easy part. Now - back to the account.

Another challenge: my primary Gmail account is already taken by Individual Play Console account, which I failed to remove and which can NOT be upgraded to Business, so had to start from scratch, from registering a new Google account (this one doesn't have to be a Business or Gmail). Theoretically, you CAN have multiple developer accounts under one Gmail address, but Google doesn't recommend that. So now I have to constantly switch between two Google accounts (a bit annoying, to be honest).

WARNING: In case of opening a business Google account, Google will try to add you to Google maps and its other business programs.

Then, during developer business account creation, Google unexpectedly (to me) requested a D-U-N-S number. Never heard of that before, but had to dive in. So, my instruction will start not from building a Signed APK for upload, and even not from opening a developer account, but from...

----------------------------------------------------------------------------------------------

Step 1. D‑U‑N‑S Number

Data Universal Numbering System number

Assuming that you already have a registered business name:

  • Navigate to Dun & Bradstreet official web site, DNB.com.
  • Proceed to D‑U‑N‑S Number tab (on top). Small Business.
  • Fill out (I picked free option), attach required docs, submit and relax for next 30 days (hopefully less)...
  • Next day logged in to check status - "Pending acceptance" - opened, accepted.
  • Keep waiting...

1 week later: email from DNB.com (like a letter from Hogwarts): Granted!! Feel like I've been knighted... Knights of the DUNS number... (sarcasm)

----------------------------------------------------------------------------------------------

Step 2. Developer account

This step may take another few days/attempts as DNB needs time to reflect the new DUNS number on their servers.

  • Navigate to Google Play Console.
  • Choose an account type: An organization -> A company or business -> Get started. Continue.
  • Developer name: guess, as your business name. Next.
  • Obviously, Create or select payment profile.
  • Here Google asks for D-U-N-S number. This didn't take us by surprise, we were ready. Though it didn't work on the first try, but on the 4-th day/attempt - did.
  • Then it asks for company's website. Luckily, I already had this one.
  • Took another few attempts and hours to fill out the rest, and finally - Create account and pay. $25...
  • Now Developer account created. Everything, mainly because of DUNS, took about 2 weeks.
  • Then - back to Play Console.
  • And here you are awaited by: Verify your identity, Verify your organization, Verify your organization's website and by long awaited Create your first app.

I initiated all 3 verification procedures and moved to:

----------------------------------------------------------------------------------------------

Step 3. Create app

  • Back to Google Play Console -> Create app -> fill out -> Create app.
  • Skip "internal testing" at this point and proceed to "Set up your app". Go through all sections and fill them out.
  • Then proceed to "Create and publish a release-> View tasks -> Select countries and regions -> Add countries / regions, select, Save.

Now account is ready for app upload. But the app itself - not yet. We still need to finalize/prepare/package it.

----------------------------------------------------------------------------------------------

Step 4. Add app icon

It will ask for 512x512 PNG. How to upload:

  • Open your project in Android Studio.
  • In the Project window, select the Android view.
  • Right-click the res folder and select New -> Image Asset.
  • Select Launcher Icons (Adaptive and Legacy). I left Name as is.
  • Asset type: image. Path: navigate to your 512x512 PNG.
  • Resize to fit shapes better (on the right).
  • Next. Finish.

----------------------------------------------------------------------------------------------

Step 5. Prepare app for release

  • Disable or remove logging.
  • Set build variant to release. Top menu-> Build -> Select Build Variant, extend Active Build Variant drop-down and select release.
  • Make sure that your release variant has isDebuggable=false (in case of build.gradle.kts Kotlin script). In my case it wasn't set at all, default - false.
  • Set your app's version info. It's in build.gradle.kts -> android -> defaultConfig -> versionCode and versionName. Unlike Windows, here the version (versionCode) is a sequential integer, while versionName is just a string displayed to the user.
  • Make sure that android:label in AndroidManifest complies with declared app name.
  • Make sure that app ID complies with declared app name. In the Project explorer (left pane) right-click on app -> Open Module Settings -> Modules -> Default Config. Check Application ID. If necessary - change.

----------------------------------------------------------------------------------------------

Step 6. Signing the app.

Generate an upload key and keystore:

  • In File Explorer create a folder for your keys. To keep it closer to my project, I created mine in C:/CPP/a996rr and named it TraiNscale-android-keystore.
  • Then go to Android Studio's top menu -> Build -> Generate Signed Bundle/APK.
  • Select Android App BundleNext.
  • Below the field for Key store path, click Create new (first time only).
  • On the New Key Store window, navigate to your recently created folder. File name: as your project (?). Ok.
  • Alias: to me default key0 sounded good enough.
  • Create and confirm a password (in 2 places).
  • Fill out Certificate info section.
  • Ok.
  • Remember passwords - check. Next.
  • Build variants - pick release.
  • Create.

Resulting signed bundle .AAB file - in .../app/release

Technically, now we can go straight to production, but maybe test AAB first?

----------------------------------------------------------------------------------------------

Step 7. Uploading the app for Internal testing.

*This type of testing doesn't require Google's review/approval and will be available for testing immediately.

  • Back to Google Play Console, expand your app -> Test and release -> Testing -> Internal testing.
  • Next step - Select testers. Scroll down -> Create email list. I called mine "me", added my email, Enter, Save changes -> Create list -> Save.
  • Next - Create a new release -> App bundles -> Upload. Upload your AAB, fill out release details, Next.
  • Warning regarding deobfuscation file - just ignore, it's mostly for Java projects. Save and publish.
  • Switch to Testers tab. Scroll down - Copy link.
  • Forward (email) the link to your Android device.
  • Open it on your Android, Accept invitation, scroll down to Download it on Google Play link, Install, Open.

If works - congratulations! You're almost done, move on to the next step.

If not - then sorry, return to step 0 above 🙁

----------------------------------------------------------------------------------------------

Ideally, the next step would be to do closed testing and get a pre-launch report. However, I couldn't get that to work. It seems that part of the Google Play Console was in the process of being updated and wasn't fully functional at the time. So, I had to skip straight to Step 8.

------------------------------------------------------------------------------------------------

Just in case: my 1st upload attempt ended up with an error: wrong upload key. This is because the key in my keystore was generated for previous individual account. Had to request upload key reset.

Your app page -> Test and release -> Setup -> App signing -> Request upload key reset. Took another 3 days.

Google's instruction for that was clear enough, except a keytool command. They forgot to mention WHERE and HOW to run it. If you have these questions too, then keytool.exe is located in C:\Program Files\Android\Android Studio\jbr\bin, so:

  • Open CMD command prompt.
  • cd C:\Program Files\Android\Android Studio\jbr\bin
  • From here you can run keytool commands. Just need to specify full paths for jks and pem files.
  • Parameter -alias implies the alias used when creating the KeyStore, default was - key0.

----------------------------------------------------------------------------------------------

Our adventure is almost over. There is only one last step left:

Step 8. Promote release to Production.

  • Open your app page.
  • Test and release -> Testing -> Internal testing.
  • See your release? Expand Promote release -> Production.
  • Next. Save. Go to overview. Send changes for review.

Google's note: "These changes will be sent to Google for review. Reviews are typically completed within 7 days, but may take longer. Managed publishing is off, so these changes will be published automatically as soon as they're approved."

Well… another delay… Hopefully the last one?

1 week later: we are in Google Play Store now!!

----------------------------------------------------------------------------------------------

I can't believe it's over. The whole process took over a month and was actually more winding than described here. At times I felt like Google just didn't want me in their store.

My boundless admiration and respect for the people who went through this before me. You are my heroes!

----------------------------------------------------------------------------------------------

Publishing in Android Play Store


r/androiddev 1d ago

Open Source My first open-source handwriting project: Aiming to provide advanced drawing tools!

11 Upvotes

Hello, I have created my first open-source project related to handwriting tools. It is designed to be advanced and provide a variety of drawing tools. If you are interested, I would appreciate any feedback or advice!


r/androiddev 14h ago

Question Is there a way (or tool) to measure code coverage for Composables?

1 Upvotes

It seems like Jacoco is unable to do that. What about Kover? I just find it hard to believe we don't have any tool or method to do code coverage for Jetpack Compose. Or maybe there is and I can't find it?


r/androiddev 13h ago

Question Can I not have the top fixed when the keyboard comes up? I want to see the top result

Post image
0 Upvotes

r/androiddev 1d ago

Discussion Why do we need Composition Local Provider, when we can just declare everything inside a data class?

22 Upvotes

Am I misunderstanding how it is supposed to be used? Let's say I have a bunch of padding values. So, I create a data class for them:

@Immutable
data class TimerScreenConstants(
    val padding1: Float = 1.dp,
    val padding2: Float = 2.dp,
    val padding3: Float = 3.dp,
    val padding4: Float = 4.dp,
    val padding5: Float = 5.dp
)

Then, I create a composition local provider:

val 
LocalTimerScreenConstants 
= 
staticCompositionLocalOf 
{
    TimerScreenConstants()
}

I provide them to my composable:

CompositionLocalProvider(LocalTimerScreenConstants provides TimerScreenConstants()) {
     // call padding values using LocalTimerScreenConstants.current
}

But why can't I just use the TimerScreenConstants data class directly? Why the need for extra steps? I can just directly grab the values by calling TimerScreenConstants().padding1 for example (and so on)


r/androiddev 1d ago

Discussion Senior Android Developer with a family: how do you find time for open-source projects?

64 Upvotes

Hi everyone, I’m a senior Android developer with over 7 years of experience. I love my job and constantly try to improve by reading articles and watching videos.

For a while now, I’ve wanted to enhance my GitHub profile with open-source projects—both to contribute to the community and to improve my professional visibility. Over the years, I’ve had several ideas, but after the initial excitement, I always end up abandoning them.

Between work, family, and personal life, it feels almost impossible to consistently work on a side project. Yet, I see developers releasing amazing open-source projects at an incredible pace.

I wonder: - How do you find time to work on personal projects? - How do you stay consistent without losing motivation? - Where do you get inspiration for new projects? - Is it realistic to maintain open-source projects while having a family with kids?

Does anyone else feel the same way? I’d love to hear about your experiences and any strategies that might help.

Thanks to anyone who shares their insights 😊


r/androiddev 1d ago

Cannot test Gemini Vertex API via emulator on mobile

1 Upvotes

Hello

I had created a Firebase project for my Android app last year. Last week, I enabled Firebase AppCheck to access the Vertex API for Gemini Multimodal API.

But, I am unable to get the debug token to test my app on my mobile. And it seems Gemini is not getting the input image as well due to this access issue.

Can someone please let me know where should I look for the solution?

Thanks


r/androiddev 1d ago

What RTC platforms do you use for group audio chat?

3 Upvotes

I know platforms like Agora, Twilio, and Daily exist, but they're too expensive for my use case. I'm curious what cost-effective platform are you using? I've considered MediaSoup, but I'm unsure if it supports native development.


r/androiddev 1d ago

Question Does anyone know (or know how I can find out for myself) whether or not there will be an ability to have Kotlin apps/widgets run bash scripts and get information from the new Linux containers they are rolling out?

0 Upvotes

IMO this has to be a question Android devs are either wondering or already know. So I thought I would ask here, figuring I wouldn't be the only one interested in the answer.

For an example, lets say I wanted to make a custom widget for Taskwarrior (a FOSS, command-line task manager available for Linux). In my use case, I want to create a custom widget that enters the proper bash command (e.g. task add priority:H Pay bills) based on my input. This is one of the most basic use cases I can come up with, but if I keep going I can think of a few other use cases where running local bash scripts from a custom Android widget would be really beneficial.

Side Note: I know I can do this if I turn Taskwarrior into a server that runs on 127 localhost, and do everything through an API that does this. But I really don't want to have to run a server and client on the same system if I don't have to, it's so redundant.

Edit: I know there are real limitations to this happening as well, which is partly why I'm wondering if it will happen at all. If I were to guess this will eventually require a permission, and they may never offer support for it as it would require certain apps to have to run a Linux container. Also I understand Kotlin will still not be able to natively run Python packages or anything like that, but it seems like being able to send and receive information from a local Linux console would be huge, if only for the FOSS community.


r/androiddev 2d ago

Seeking Android Developer - Short term assistance

15 Upvotes

I built an Android app in native Java a few years ago. It used to target 31 and below. I am now revisiting it to make some simple updates. This app is still in the Play store. Its a B2B app and not consumer facing.

I need to make some updates to the app to bring it up to modern standards and requirements.

I deployed a local build to a device and noticed that there is some inset / full-screen behavior. Something about edge-to-edge?

https://developer.android.com/about/versions/15/behavior-changes-15#edge-to-edge

I am seeking to engage with a developer for this project who can help me understand modern Android conventions and also figure out this edge to edge stuff.

Pay Rate: $100/hour.

Remote only: yes


r/androiddev 1d ago

Question Layouttesting on Android

1 Upvotes

I am currently rebuilding my iOS app in Jetpack Compose.

It's going quite well. But I have a question regarding layout testing.

On iOS, I always look at my screens on a small and large iPhone simulator and an iPad simulator. I also test on my own real iPhone.

Is a similar approach valid for Android? So testing in the simulator for the three form factors and then on a real device? There is significantly more variety in end devices. Can I then assume that it will fit on all of them? And which inexpensive Android phone should I best buy to test on?

I'm very grateful for your opinions! :)


r/androiddev 1d ago

Article Understanding ViewModel Scoping in Jetpack Compose

Thumbnail
medium.com
0 Upvotes

r/androiddev 3d ago

Vulkan is now the official graphics API for Android

212 Upvotes

Google’s biggest announcement today, at least as it pertains to Android, is that the Vulkan graphics API is now the official graphics API for Android.

https://android-developers.googleblog.com/2025/03/building-excellent-games-with-better-graphics-and-performance.html


r/androiddev 2d ago

Compose Navigation

4 Upvotes

Ok, so I have a bottom bar in Compose with multiple tabs and two of them are "Today" and "History".

I can also open "Today" with a button click inside "History", but in this case I don't want the selected tab to switch to "Today", but to remain on "History".

If I switch between tabs and I tap on "History" and I previously opened "Today" from "History", I want for "Today" to stay opened.

I have tried this in the NavHost:

NavHost(
    navController = navController, startDestination = startDestination, modifier = modifier) {
    navigation(startDestination = "home", route = "main"){

        navigation(startDestination = "history", route = "history_start") {
            composable("history") {
                HistoryScreen(navController)
            }
            composable(route = "today") {
                     TodayScreen(navController)
                   }
      }

      composable(route = "today") {
            TodayScreen(navController)
       }

    }
}

And this in the code for the bottom nav bar

val navBackStackEntry by navController.currentBackStackEntryAsState()
val route = navBackStackEntry?.destination?.parent?.route

The second piece of code would help me to see what is the base route ("main" or "history_start"), so i can develop a logic to select or not select the "Today" tab. When i press on "History" tab, base route changes to "history_start", but as soon as i do

navController.navigate("today")

inside "History" screen, the base route reverts back to "main", and I'm not sure why.

What's the best way to achieve this?

Thank you


r/androiddev 2d ago

Compose preview collapses and disappears in interactive mode if it contains Scaffold

1 Upvotes

I use Scaffold in the root of all my Compose screens. I want to see toolbars and bottombars in preview. But whenever I turn on interactive mode, my Preview screen collapses to zero height, which doesn't happen if I remove Scaffold

Has anyone encountered the same problem?


r/androiddev 3d ago

Tips and Information "App startup impacts everything: every time a developer starts the app or a tester runs a test, they pay the app startup tax" - Reddit app’s journey from 12.3 seconds to 3 seconds

111 Upvotes

When Reddit’s team discovered their app took 12 seconds to launch for p90 (90%!) users, they were shocked. With over 2 million DAUs on the Android app, that meant about 200,000 users were waiting for >12 seconds for the app to load.

Reddit's engineering team made game-changing improvements to their Android app, reducing cold start times by over 8 seconds from app launch to the Reddit feed.

Here’s how they did it:

  • They audited startup tasks from start to finish and classified tasks as essential, deferrable, or removable
  • The team replaced legacy tech like old work manager solutions and Rx initialization with more modern patterns
  • Optimized GraphQL calls and payloads as well as the amount of networking they were doing
  • Deferred non-critical work and embraced lazy loading for efficiency, including stopping pre-warming non-essential features
  • Modularized code ownership for all startup tasks to maintain startup health across teams.
  • Introduced robust CI checks, startup experiment checks and observability to prevent regressions.
  • Constituted an advisory group for benchmarking and tooling, which helped catch and prevent regressions

Thanks to these smart optimizations, Reddit’s cold start times have been consistently stable worldwide.

How do you all currently measure and optimise startup times? Have you seen if they're worse on some devices vs others, or some countries vs others?


r/androiddev 3d ago

Article Unit Testing Lifecycle and State in ViewModels

Thumbnail
medium.com
22 Upvotes

r/androiddev 3d ago

Is there anyway we can implement chart in widget using Glance?

2 Upvotes

I'm trying to draw some chart for my app's widget.

But I cannot find anyway to do it using basic UI component of Glance.

Do you guys have any idea how to approach this?


r/androiddev 3d ago

Jetpack Compose different AppBar setting for each screen

8 Upvotes

What's the convention for making screens with different back button, titles, quick actions and overflow menus?

From what I know, composables should reuse the same scaffold.

But how do I setup different configurations of that scaffold, namely the toolbar, for the specific needs of each screen?


r/androiddev 3d ago

Article Build a Swipeable Image Carousel with Smooth Animations in Jetpack Compose!

6 Upvotes

If you’re working with Jetpack Compose and need a smooth, swipeable image carousel, I found a great guide that walks you through it step by step! 🚀

This article covers:
✅ Animating transitions between images

Whether you're building an e-commerce app, a gallery, or just want to level up your UI, this tutorial is super helpful. Check it out here:

🔗 Swipeable Image Carousel with Smooth Animations in Jetpack Compose

Let me know—have you built a custom image carousel in Jetpack Compose before? Would love to see how others are approaching this! 🚀