Experimental architecture app with example usage intended to be a showcase, test and skeleton app.
- Modularised app with flat structure:
:app -> :feature -> :lib -> :core-android -> core
. - Core features (Analytics, Configuration, Crash reporting, Networking, Logging, Deep Linking) are behing simple pure Kotlin interfaces to achieve convenient simple core interfaces.
- Features are composed together within
AppComponent
in plugin based manner. Each feature contributes by Dagger module. To add a feature only module and Gradle dependency lines are needed. - Plugin based composition of features and modules contributing to collection of "plugins" - see:
OnAppCreate
, orLinkLauncher
- Android Architectue Components
LiveData
andViewModel
are used to connect Activities with app logic - Deep Link navigation used across the app - Article
- UI Instrumentation testing using Espresso and mocking network layer to achieve isolation OkReplay See
ReplayHttpComponent
- All core services have its lightweight fake implementation. See
Fakes
- Dependency replacement in test is done by Dagger components in
TestUITestApp
- RxJava is used for threading everywhere, allowing proper idling of UI tests. Also
AppSchedulers
dependency makes all threading testable. - Push is implemented by using Firebase Cloud Messaging. See
PushActionCommand
. Thanks to deep link navigation app can be controlled remotely by executing deep links -LaunchDeepLinkCommand : PushActionCommand
Navigator
pattern to be able to easily navigate withoutContext
TopActivityProvider
to avoid havingContext
dependencie everywhere and to be able to have cleaner pure Kotlin interfaces- Uses LiveData-Testing to test ViewModel. Article
- Example usage of module graph assertion - see here.
- Tests are run on Firebase Test Lab. See PR
- Release publishing by Triple-T/google-play-publisher plugin
- Enforced ownership of remote configuration and analytics events - Details on PR. More on why these need to be explicitly owned on this article.