Wiring features into :app
:app is the thinnest module in the project
:app sits at the top of the stack and depends on every :feature:* module. Its job is small on purpose: hold the Application class (@HiltAndroidApp, from module 15), host the navigation graph, and wire feature screens together. It should contain almost no feature logic of its own β that all lives one layer down.
For :app to build a nav graph, each feature module has to expose a public API: typically a screen composable and a nav route, both meant to be called from outside the module. Everything else inside a feature module β its ViewModels, its internal composables, its Hilt modules β stays internal or simply undeclared in any other module's dependencies, so nothing outside can reach in and depend on implementation details that are free to change.
This ties back to Hilt (module 15): each :feature:* module can define its own @Module/@InstallIn bindings, and Hilt merges all of them into one graph at the :app level β no module needs to know about any other feature's DI setup.