A simple list-detail android application
A simple List-Detail sample project that presents a modern, 2020 approach to Android application development with up to date tech-stack.
The goal of the project is to demonstrate best practices by using up to date tech-stack and presenting modern Android application Architecture that is monolithic, scalable, maintainable, and testable.
This project is being maintained to match current industry standards. Please check CONTRIBUTING page if you want to help.
This project brings to table set of best practices, tools, and solutions:
- 100% Kotlin
- Modern architecture (Model-View-ViewModel, Model-View-Intent)
- Android Jetpack
- Reactive UI
- Testing (Unit, UI)
- Material design
Min API level is set to 21
, so the presented approach is suitable for over
85% of devices running Android. This project takes advantage of many
popular libraries and tools of the Android ecosystem. Most of the libraries are in the stable version unless there is a
good reason to use non-stable dependency.
- Tech-stack
- Architecture
- Clean Architecture (at module level)
- MVVM + MVI (presentation layer)
- Android Architecture components (ViewModel, LiveData, Navigation, SafeArgs plugin)
- Tests
- Gradle
Read related articles to have a better understanding of underlying design decisions and various trade-offs.
The interface of the app utilizes some of the modern material design components, however, is deliberately kept simple to focus on application architecture.
There are a few ways to open this project.
Android Studio
->File
->New
->From Version control
->Git
- Enter
https://github.com/SunnyBe/ListDetail.git
into URL field - Provide
APP_ID="<value goes here>"
in thegradle.properties
- Run
git clone https://github.com/SunnyBe/ListDetail.git
to clone project - Go to
Android Studio
->File
->Open
and select cloned directory - Provide
APP_ID="<value goes here>"
in thegradle.properties
This is project is a sample, to inspire you and should handle most of the common cases, but please take a look at additional resources.
ktlint
import-ordering
rule conflicts with IDE default formatting rule, so it have to be disabled- False positive "Unused symbol" for a custom Android application class referenced in AndroidManifest.xml file (Issue)
- False positive "Function can be private" (Issue)
- Unit tests are running in IDE but fail after running gradle task because of missing Agrs class (Issue)
Want to contribute? Check our Contributing docs.
MIT License
Copyright (c) 2020 Sunday Ndu
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.