software design technique • Separates a program into modules according to the functionality Module • Is independent and interchangeable • Contains everything necessary • Contains only one aspect of the desired functionality “App Modularization is to modularize the Android App.”
Feature is a unit of app functionality • Feature module can be divided into more smaller feature modules ◦ The smaller is the better • Boundary depends on stakeholder’s decision • Feature module is not referred by other feature modules • Feature module may have the view or not • Dependency scope should be created for each module
module is a module that has no state and has removed its business logic completely • Should android service belong to feature module? • How can we deﬁne auth module? • Should we design each module to follow a speciﬁc architecture? • Should we make the dynamic feature module?
a module that has no state and has removed its business logic completely • There are not many modules yet • It is better to manage Library and Core modules together Library Core Library Core Feature Feature Feature Appshell
Auth Ad Content • Deﬁne auth module as a library module that has purely authentic logic without any feature-speciﬁc logic • Deﬁne feed module as a feature module that handles to login using auth module
• Each module can be built with independant architecture • Some modules have data and domain layer • Some modules have only one class • Therefore, no rule can be deﬁned for the architecture we must follow
module belongs to the app bundle, being pushed by google ◦ Allowing the module not to be installed at the initial installation ◦ Reducing the app size • The key point is the inversion of dependency between app and module • If we have well architectured modules, we can integrate it easily at anytime
one of the most important module on modularization • Navigation needs changeable abstraction • Reﬂection seems to be the best for now ◦ There are use case of major company ◦ It can implement without any dependencies • Jetpack’s navigation seems to be restricted yet
There can be many conﬂicts during the merging process. • Trunk Based Development ◦ Always ready to be released ◦ Universal versioning ◦ Simple merging strategy Trunk Based Development is better for monorepo.
easy ◦ Slow in many modules • Buck ◦ Used by Facebook, Uber, and Twitter ◦ Challenging conﬁguration ◦ Fast in many modules • Bazel ◦ Used by Google ◦ Challenging conﬁguration ◦ Fast in many modules Depends on the code scale. Gradle is better for now