Upgrade to Pro — share decks privately, control downloads, hide ads and more …

App Modularization: From Zero to Hero

App Modularization: From Zero to Hero

As your app becomes more complex and build speeds begin to increase, app modularization starts to enter the conversation. Does the concept seem fuzzy to you? Or, do you know what it means in theory but have no clue where to start in your apps?

In this talk, you will get an answer to the Five Ws on app modularization - what, why, when, where and how. You'll learn:

What Dynamic Feature Modules are and how that relates to modularization
How to identify features to modularize and all the steps to take in the process
All the pain points to look out for based on our experience

You'll get all the information you need to modularize your apps and reap the benefits!

Moyinoluwa Adeyemi

August 09, 2019
Tweet

More Decks by Moyinoluwa Adeyemi

Other Decks in Technology

Transcript

  1. WHY? × Cleaner codebase × Separation of concerns × Faster

    build times × Dynamic delivery × App Bundles 8
  2. ARCHITECTURE - MULTIPLE MODULES (SECOND PASS) 30 :database :order :lead

    :service :installation :core :inventory :app :test_shared
  3. START ACTIVITY FROM A DIFFERENT MODULE fun goToTasks(context: Context) =

    Intent(Intent.ACTION_VIEW).apply { setClassName(context.packageName, "$BASE_PACKAGE.features.service.TasksActivity") } 33
  4. APOLLO GRAPHQL ‍♀ 41 “Couldn’t find some schema files for

    the variant stagingDebug. Please ensure a valid schema.json file exists under the variant source sets”
  5. APOLLO GRAPHQL 43 apollo { customTypeMapping = ["DateTime": "java.util.Date"] schemaFilePath

    = "../../com/my/example/schema.json" outputPackageName = "com.my.example.features.feature" }
  6. DEPENDENCY INJECTION with dagger - thE problem 45 http://adavis.info/2019/06/dagger-multibinding-in-dynamic-feature-modules.html class

    ConfettiJobCreator @Inject constructor( private val jobs: @JvmSuppressWildcards Map<String, Provider<Job>> ) : JobCreator { override fun create(tag: String): Job? = jobs[tag]?.get() }
  7. DEPENDENCY INJECTION with dagger - thE problem 46 http://adavis.info/2019/06/dagger-multibinding-in-dynamic-feature-modules.html ...

    @Binds @IntoMap @StringKey(SomeJob.JOB_TAG) internal abstract fun bindSomeJob(job: SomeJob): Job ...
  8. Credits × Presentation template by SlidesCarnival × http://adavis.info/2019/06/dagger-multibinding-in-dynamic-feature-modul es.html ×

    https://github.com/android/plaid × https://codelabs.developers.google.com/codelabs/your-first-dynamic-app × https://medium.com/androiddevelopers/a-patchwork-plaid-monolith-to- modularized-app-60235d9f212e 53