This is a clone of the Spotify app made with Android and Kotlin. The application use the Spotify API to get the data from the Spotify API and display it in a list, search for songs and artist and show the library of the user. The endpoints used is located in the Web Api Reference.
🔨 Download the app from Spotify Clone APK
- Fetch new releases from Spotify
- Search for songs and artists
- Show the library of the user
- Authenticate with Spotify
- Get token to make the requests
- App arquitecture using MVVM and Clean Architecture
| 🏃 For run the app just clone the repository and execute the app on Android Studio.
This application is developed using Kotlin and uses the following components:
- MVVM + Clean Architecture
- Retrofit
- Room
- Coroutines
- Navigation Component
- ViewModel
- ViewBinding
- LiveData
- Dagger Hilt
Home Screen | Search | Library |
---|---|---|
- Use phones with Android API 21+
- Sign in with a Spotify account
The application is built using Clean Architeture pattern based on Architecture Components on Android. The application is divided into three layers:
- Domain: This layer contains the business logic of the application, here we define the data models and the use cases.
- Data: This layer contains the data layer of the application. It contains the database, network and the repository implementation.
- Presentation: This layer contains the presentation layer of the application.
The organization of the application is based on the following diagram:
app/
├── core/
├── data/
│ ├── local/
│ ├── models/
│ ├── remote/
│ └── RepositoryImplementationFiles
├── domain/
│ └── models/
│ └── repositories/
│ └── usecases/
├── presentation/
│ └── ui/
│ └── fragments/
│ └── adapters/
│ └── viewmodels/
└── di/
Each layer have your own models and the mappers are using extensions functions to transform the data between the layers.
- Hilt for dependency injection
- Kotlin Coroutines
- Retrofit
- Logging Interceptor
- Gson
- Room
- LiveData
- Navigation Component
- Concat Adapter
All these dependencies are used following google guidelines for JetPack components, Architecture Components on Android. This allow us have a better integration between the dependencies.