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.”
time • Separation of concerns • Fine-grained dependency control • Improved reusability across other apps • Improved the ownership & the quality of the codebase
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
There can be redandant codes between feature modules • Redandant codes should be extracted into the library • Recommendations ◦ No business logic for specific feature ◦ Stateless
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 define auth module? • Should we design each module to follow a specific 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 • Define auth module as a library module that has purely authentic logic without any feature-specific logic • Define 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 defined 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 • Reflection 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
Snapshot ◦ Sensitive to the size of repository • Mercurial ◦ DVCS ◦ Based on Patch ◦ Not sensitive to the size of repository Depends on the code scale. → Git is better for now
There can be many conflicts 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 configuration ◦ Fast in many modules • Bazel ◦ Used by Google ◦ Challenging configuration ◦ Fast in many modules Depends on the code scale. Gradle is better for now