Mohamed Gamal

Modular Secrets to Lightning-Fast Android Builds

What if you could stop unnecessary recompilations? Learn the modularization patterns that unlock lightning-fast Android builds and boost developer efficiency.

Modular Secrets to Lightning-Fast Android Builds
#1about 2 minutes

The daily struggle with slow Gradle builds

Slow and failing Gradle builds are a common frustration for Android developers that can be solved with better project architecture.

#2about 3 minutes

How modularization enables incremental builds

Splitting a monolithic project into smaller, independent sub-projects allows Gradle to use incremental builds and only recompile what has changed.

#3about 3 minutes

Using `implementation` instead of `api` for dependencies

The `api` configuration leaks transitive dependencies to downstream modules, causing unnecessary recompilations, whereas `implementation` encapsulates them.

#4about 2 minutes

Breaking up generic "commons" modules

Generic "commons" modules violate the single responsibility principle and become a bottleneck for recompilation, so they should be split into smaller, feature-specific modules.

#5about 2 minutes

Splitting large feature modules for faster testing

Large, complex feature modules should be broken down into smaller submodules and paired with a dedicated sample app for faster, isolated testing.

#6about 1 minute

Using public API modules to reduce recompilation

For frequently changing domains, separate the stable public API with interfaces from the implementation to prevent cascading recompilations in dependent modules.

#7about 4 minutes

Removing dependencies with a navigation system

Eliminate direct module dependencies required only for navigation by implementing a centralized system using deep links or a custom navigator pattern.

#8about 5 minutes

Unifying build logic with Gradle convention plugins

Create custom Gradle convention plugins to centralize and reuse build configurations like Hilt, Detekt, and library settings across all modules.

#9about 2 minutes

Centralizing dependencies with version catalogs

Use a TOML-based version catalog to define all library versions and plugins in a single file, ensuring consistency and simplifying updates across the project.

#10about 2 minutes

Sharing version catalogs in a polyrepo setup

For projects spanning multiple repositories, create and publish a custom Gradle settings plugin to share a single version catalog and maintain dependency consistency.

Related jobs
Jobs that call for the skills explored in this talk.

Featured Partners

From learning to earning

Jobs that call for the skills explored in this talk.

android developer

android developer

yusuf
Andijan, Uzbekistan

Remote
Junior
CSS
Java
HTML
JavaScript
+1
Rust and GoLang

Rust and GoLang

NHe4a GmbH
Karlsruhe, Germany

Remote
55-65K
Intermediate
Senior
Go
Rust