Convention Plugins
This project uses Gradle Convention Plugins to centralize common build logic and simplify
module-level build files. These plugins are located in the build-logic
directory.
Available Plugins
1. Application Plugin (dev.atick.application
)
Used for the main application module:
- Configures Android application defaults
- Sets up Compose
- Enables BuildConfig
- Configures Kotlin and Java versions
- Sets up Compose compiler metrics and reports
2. Library Plugin (dev.atick.library
)
Base plugin for Android library modules:
- Configures Android library defaults
- Sets up Kotlin
- Configures Java versions
- Enables KotlinX Serialization
3. UI Library Plugin (dev.atick.ui.library
)
Extended library plugin for UI modules:
- Includes all Library Plugin features
- Enables Jetpack Compose
- Adds Material3 experimental opt-ins
4. Dagger Hilt Plugin (dev.atick.dagger.hilt
)
Sets up Dagger Hilt in a module:
- Applies Hilt Android plugin
- Adds KSP for annotation processing
- Configures Hilt dependencies
5. Firebase Plugin (dev.atick.firebase
)
Configures Firebase services:
- Sets up Firebase BoM
- Configures Analytics, Crashlytics, and Performance
- Applies necessary Google Services plugins
Using the Plugins
To use these plugins in your module's build.gradle.kts
:
plugins {
alias(libs.plugins.jetpack.ui.library)
alias(libs.plugins.jetpack.dagger.hilt)
// Add other plugins as needed
}
Note
The plugins are already registered in the version catalog (libs.versions.toml
), making them
easily accessible across all modules.
Creating Custom Plugins
To create your own convention plugin:
-
Add your plugin class in
build-logic/convention/src/main/kotlin
: -
Register it in
build-logic/convention/build.gradle.kts
: -
Add it to
libs.versions.toml
:
Plugin Development Tips
-
Accessing Version Catalog:
-
Configuring Android Extensions:
-
Adding Dependencies:
Tip
Keep your plugins focused and single-purpose. Create new plugins for distinct functionality rather than overloading existing ones.
Best Practices
-
Module Organization:
- Use
jetpack.application
for the app module - Use
jetpack.ui.library
for feature modules with UI - Use
jetpack.library
for core modules without UI
- Use
-
Plugin Combinations:
-
Version Management:
- Keep versions in the version catalog
- Reference them in plugins using
libs.findVersion()
Warning
Don't repeat plugin configurations in module-level build files. If you find yourself doing this, consider creating a new convention plugin instead.
Further Reading
- Dependency Management: Learn about version catalogs and automatic dependency updates
- Architecture Overview: Understand the app's architecture
- Design Philosophy: Learn about design principles
- Adding New Features: Learn how to add new features to the project