Managing dependencies and plugins across large projects can be challenging, especially as the project scales and more modules come into play. Gradle version catalogs offer a solution, allowing you to centralize dependency and plugin management. This makes updates, organization, and type-safe access across multiple modules much easier. Let’s go step by-step through setting it up and migrating your Android app.

Why Use Gradle Version Catalogs?

With traditional dependency management, dependencies are scattered across various build.gradle files, making it cumbersome to update or locate specific versions. Version catalogs address this by centralizing dependency definitions in a single file, making it easier to manage and reducing redundancy across your project files.

Step 1: Creating Your Version Catalog File

To start, create a version catalog file in your root project’s gradle folder. This file should be named libs.versions.toml because that’s where Gradle looks by default for catalog entries.

Note: While you can rename the catalog file, this requires additional configuration in your build files. For simplicity, it’s best to stick with the default libs.versions.toml name.

Creating and Organizing the Catalog

In libs.versions.toml, there are three main sections:

  • [versions]: Defines version numbers for dependencies and plugins.
  • [libraries]: Lists your project dependencies with associated versions.
  • [plugins]: Lists your plugins with their versions.

Here’s an example layout for the libs.versions.toml file:

[versions]
ktx = "1.9.0"
androidGradlePlugin = "7.4.1"

[libraries]

androidx-ktx = { group = “androidx.core”, name = “core-ktx”, version.ref = “ktx” }

[plugins]

android-application = { id = “com.android.application”, version.ref = “androidGradlePlugin” }

In the [versions] section, define your version variables first. Then, reference those version variables in the [libraries] and [plugins] sections. Using version references keeps your dependencies consistent and easy to update in one place.

Step 2: Gradually Migrate Dependencies

When migrating existing dependencies, it’s often easier to do this step-by-step. Start by adding dependencies to your catalog file, syncing your project, and then replacing the old dependency declarations with catalog references. Here’s an example of migrating an androidx dependency:

// Old way in build.gradle.kts
dependencies {
    implementation("androidx.core:core-ktx:1.9.0")
}

// Using version catalog
dependencies {
    implementation(libs.androidx.ktx)
}

Using kebab-case naming for library and plugin entries (e.g., androidx-ktx) improves code completion in Android Studio and maintains readability. For more tips on managing Android dependencies, refer to this guide on Android architecture.

Step 3: Migrating Plugins to the Catalog

Just like dependencies, plugins can be added to the version catalog. In your libs.versions.toml file, list plugins under [versions] and [plugins]:

[versions]
androidGradlePlugin = "7.4.1"

[plugins]

android-application = { id = “com.android.application”, version.ref = “androidGradlePlugin” }

In your build.gradle.kts files, update the plugins block to use the alias defined in the catalog:

// Top-level build.gradle.kts
plugins {
   alias(libs.plugins.android.application) apply false
}

// Module-level build.gradle.kts
plugins {
   alias(libs.plugins.android.application)
}

Important: If you’re using Gradle below version 8.1, you need to add @Suppress("DSL_SCOPE_VIOLATION") to the plugins block to avoid compatibility issues. Check this issue for details.

Testing the Migration

After migrating dependencies and plugins, it’s important to sync your project in Android Studio. Verify that each module recognizes the new catalog entries. This ensures everything is wired up correctly before removing any old dependencies.

Common Migration Issues

  • Sync Errors: If you encounter sync issues, double-check for typos in your libs.versions.toml file.
  • Version Conflicts: Sometimes, different dependencies require conflicting versions. Use Gradle’s resolutionStrategy to force a particular version if necessary.

For additional troubleshooting tips, see the official Gradle documentation.

Advantages of Using Version Catalogs

Beyond reducing boilerplate code, version catalogs make it easier to:

  • Keep Dependencies Consistent: Centralized versioning minimizes mismatches across modules.
  • Streamline Updates: Update versions in one place instead of hunting through each build.gradle file.
  • Enhance Code Readability: Cleaner build.gradle files improve code readability, especially for larger projects.

Want to explore more ways to enhance your Android build setup? Check out this Android news highlight for the latest on Android build optimizations.


Gradle version catalogs offer a more structured, maintainable approach to dependency and plugin management. By migrating your Android project to version catalogs, you can ensure consistent, type-safe dependency management across modules, simplify version updates, and keep your project organized as it scales. Take a phased approach to migration, and your Android project will be future ready in no time.

Did you like this article?
You can subscribe to my newsletter below and get updates about my new articles.

Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *