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
AppComponentin 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:
- Android Architectue Components
ViewModelare used to connect Activities with app logic
- Deep Link navigation used across the app - Article
- Dynamic features are implemented. See e.g.
- UI Instrumentation testing using Espresso and mocking network layer to achieve isolation OkReplay See
- All core services have its lightweight fake implementation. See
- Dependency replacement in test is done by Dagger components in
- RxJava is used for threading everywhere, allowing proper idling of UI tests. Also
AppSchedulersdependency 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
Navigatorpattern to be able to easily navigate without
TopActivityProviderto avoid having
Contextdependencie everywhere and to be able to have cleaner pure Kotlin interfaces
- Uses LiveData-Testing to test ViewModel. Article
- Module Graph generation into Graphviz is implemented together with highlighting longest path in the graph. See [PR #205](https://github.com/jraska/github-client/pull/205}
- Module Graph measurement is used to assert height of dependency graph. See
/buildSrcand PR #205. Adding features by decoration to all screens implemented. See PR #189