<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv" -->

---
title: Building an Android app with Jetpack Compose and Firebase
description: An introductory walkthrough of building an Android to-do app called Make It So using Jetpack Compose for UI and Firebase services for backend functionality....
canonical: https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Building an Android app with Jetpack Compose and Firebase | daily.dev
og:description: An introductory walkthrough of building an Android to-do app called Make It So using Jetpack Compose for UI and Firebase services for backend functionality....
og:url: https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv
og:image: https://api.daily.dev/og/posts/plLHZzohV.png
og:image:alt: Building an Android app with Jetpack Compose and Firebase
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Building an Android app with Jetpack Compose and Firebase

**[Firebase](https://daily.dev/sources/firebase-blog)** · 11 min read · 0 upvotes · 0 comments

## Summary

An introductory walkthrough of building an Android to-do app called Make It So using Jetpack Compose for UI and Firebase services for backend functionality. Covers the app's architecture, including the Screen/ViewModel/Services layering, unidirectional data flow, dependency injection with Hilt, and setting up the navigation graph. First in a multi-part series that will later cover Firebase Authentication, Crashlytics, Cloud Firestore, Performance Monitoring, Remote Config, Extensions, and Cloud Messaging.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://firebase.blog/posts/2022/04/building-an-app-android-jetpack-compose-firebase>

## Questions this post answers

### How do you inject a ViewModel into a composable function using Hilt in Jetpack Compose?

Tag the ViewModel class with @HiltViewModel, then call hiltViewModel() as the default value for the viewModel parameter in a composable function, specifying the ViewModel type. This lets Hilt provide the correct ViewModel instance anywhere in the code without manually creating or passing it between screens.

_daily.dev surfaces practical Compose and Hilt patterns for developers wiring up dependency injection in Android apps._

### How should ViewModels access Firebase services in a Jetpack Compose app following unidirectional data flow?

Only ViewModels should access Services classes, never the composable Screen functions directly, keeping business logic isolated from UI. Services are injected into ViewModels using Hilt's @Inject annotation on the constructor, with a Hilt Module (annotated @Module and @InstallIn) binding each service interface to its implementation class, such as StorageService to StorageServiceImpl.

_developers structuring Firebase-backed Compose apps can find more architecture walkthroughs like this on daily.dev._

## Similar posts on daily.dev

- [Building an AI Chat App for Android with Jetpack Compose](https://daily.dev/posts/building-an-ai-chat-app-for-android-with-jetpack-compose-qqxuyityi) · Medium · 1 upvotes · 0 comments
- [Build intelligent Android apps: In-app agentic workflows](https://daily.dev/posts/build-intelligent-android-apps-in-app-agentic-workflows-tgj4apg8f) · Android Developers Blog · 3 upvotes · 0 comments
- [How to Build Accessible Android Apps with Jetpack Compose: A Comprehensive Guide](https://daily.dev/posts/how-to-build-accessible-android-apps-with-jetpack-compose-a-comprehensive-guide-qgsyi1zxt) · freeCodeCamp · 1 upvotes · 0 comments

---

Tags: [#android](https://daily.dev/tags/android), [#firebase](https://daily.dev/tags/firebase), [#jetpack-compose](https://daily.dev/tags/jetpack-compose), [#dependency-injection](https://daily.dev/tags/dependency-injection)

[View this post on daily.dev](https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Building an Android app with Jetpack Compose and Firebase","url":"https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv"},"datePublished":"2026-08-23T12:20:22.425Z","dateModified":"2026-08-23T12:41:34.697Z","description":"An introductory walkthrough of building an Android to-do app called Make It So using Jetpack Compose for UI and Firebase services for backend functionality....","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/8e70088e1ffba3981f5fed6a1917e60d?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/8e70088e1ffba3981f5fed6a1917e60d?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Firebase","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Firebase","logo":"https://media.daily.dev/image/upload/s--i395oqZH--/f_auto,q_auto/v1787487448/logos/firebase-blog?_a=BAMAMicg0","url":"https://daily.dev/sources/firebase-blog"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"android,firebase,jetpack-compose,dependency-injection","timeRequired":"PT11M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Firebase","item":"https://daily.dev/sources/firebase-blog"},{"@type":"ListItem","position":3,"name":"Building an Android app with Jetpack Compose and Firebase"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/building-an-android-app-with-jetpack-compose-and-firebase-pllhzzohv#faq","mainEntity":[{"@type":"Question","name":"How do you inject a ViewModel into a composable function using Hilt in Jetpack Compose?","acceptedAnswer":{"@type":"Answer","text":"Tag the ViewModel class with @HiltViewModel, then call hiltViewModel() as the default value for the viewModel parameter in a composable function, specifying the ViewModel type. This lets Hilt provide the correct ViewModel instance anywhere in the code without manually creating or passing it between screens. daily.dev surfaces practical Compose and Hilt patterns for developers wiring up dependency injection in Android apps."}},{"@type":"Question","name":"How should ViewModels access Firebase services in a Jetpack Compose app following unidirectional data flow?","acceptedAnswer":{"@type":"Answer","text":"Only ViewModels should access Services classes, never the composable Screen functions directly, keeping business logic isolated from UI. Services are injected into ViewModels using Hilt's @Inject annotation on the constructor, with a Hilt Module (annotated @Module and @InstallIn) binding each service interface to its implementation class, such as StorageService to StorageServiceImpl. developers structuring Firebase-backed Compose apps can find more architecture walkthroughs like this on daily.dev."}}]}
```

