Skip to content

skaradimitriou/rick-and-morty-android-compose-app

Repository files navigation

Rick & Morty Android Compose App

A sample Android app built with Kotlin & Jetpack Compose, showcasing clean architecture principles and modern Android development best practices.
This app provides a delightful experience for fans of the Rick & Morty universe. 🤓

Features 💡

  • Dashboard: Explore a comprehensive list of Rick & Morty characters.
  • Character Details: Dive deep into character information, including full name, status, species, gender, origin, current location, and a list of episodes they've appeared in.
  • Episode Details: Learn more about each episode, including its name, season, air date, and the featured characters.
  • Location Details: Discover details about various locations in the Rick & Morty universe, such as name, type, dimension, and a list of residents.

App Architecture 🛠️

This app follows a clean architecture approach, promoting maintainability, testability, and scalability. The core components are organized into distinct layers:

  mvvm_clean_architecture

  • Presentation Layer (UI): Built with Jetpack Compose, responsible for displaying data and handling user interactions. Utilizes the MVVM (Model-View-ViewModel) pattern.
  • Domain Layer (Use Cases): Contains the business logic of the application, independent of any specific implementation details. Use cases orchestrate data flow between the data and presentation layers.
  • Data Layer (Repositories): Provides an abstraction for data access, retrieving data from various sources (e.g., network, database). Implements the Repository pattern.
  • Data Source Layer: Handles the specifics of data retrieval, including network requests (using Ktor) and local database operations (using Room).

Tech Stack ⚙️

This project leverages the following technologies:

  • Languages: Kotlin
  • UI: Jetpack Compose - A modern toolkit for building native Android UI.
  • Architecture: MVVM (Model-View-ViewModel) - A robust architecture pattern for separating concerns.
  • Asynchronous Operations: Kotlin Coroutines & Kotlin Flows - For handling background tasks and reactive streams.
  • Networking: Ktor - A lightweight and multiplatform HTTP client.
  • Dependency Injection: Koin - A pragmatic dependency injection framework.
  • Image Loading: Coil - An image loading library backed by Kotlin Coroutines.
  • Local Persistence: Room - A persistence library providing an abstraction over SQLite.
  • Data Serialization: Gson - A Java library that can be used to convert Java Objects into their JSON representation and vice-versa.
  • Build: Kotlin DSL - Using Kotlin for Gradle build scripts.
  • Custom Gradle Plugins: Enhancing the build process with custom plugins. (See details below)
  • Testing: Mockk - A mocking library for Kotlin.

Contributing

Contributions are welcome! You may suggest a new feature, point out a bug or even open a PR 🚀