Generalidades

Cómo compartir dependencias y compilar la configuración en kotlin-DSL | Autor: Keivan Shamlu | Diciembre de 2021

Kevin Shamru
Como compartir dependencias y compilar la configuracion en kotlin DSL
LEER  Cómo manejar el estado en Jetpack Compose por Farhan Tanvir | Marzo de 2022
object DependencyInjection {

object Dagger {
private const val version = "2.40.5"
const val runtime = "com.google.dagger:dagger:$version"
const val android = "com.google.dagger:dagger-android:$version"
const val android_support = "com.google.dagger:dagger-android-support:$version"
const val compiler = "com.google.dagger:dagger-compiler:$version"
const val android_support_compiler =
"com.google.dagger:dagger-android-processor:$version"

object Assisted {
private const val version = "0.8.1"
const val annotations =
"com.squareup.inject:assisted-inject-annotations-dagger2:$version"
const val processor =
"com.squareup.inject:assisted-inject-processor-dagger2:$version"
}
}
}

dependencies {
androidDeps.DependencyInjection.Dagger.apply {
implementation(runtime)
implementation(android)
implementation(android_support)
kapt(compiler)
kapt(android_support_compiler)
}
androidDeps.DependencyInjection.Dagger.Assisted.apply {
compileOnly(annotations)
kapt(processor)
}
}
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
//configurations here
}

dependencies {
implementation KotlinLibraries.kotlin
}

apply from: '../android_feature_config.gradle'
plugins {
GradlePluginId.apply {
id(ANDROID_APPLICATION)
kotlin(ANDROID)
kotlin(KAPT)
}
}
android {//configurations here
}
apply { from("../android_feature_config.gradle.kts") }
plugins {
`kotlin-dsl`
}
buildscript {
repositories {
google()
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20")
}
}
repositories {
google()
mavenCentral()
}
dependencies {
implementation("com.android.tools.build:gradle:7.0.4")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.20")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20")
}
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions {
languageVersion = "1.3"
}
fun DependencyHandler.implementation(depName: String) {
add("implementation", depName)
}
fun DependencyHandler.testImplementation(depName: String) {
add("testImplementation", depName)
}
fun DependencyHandler.androidTestImplementation(depName: String) {
add("androidTestImplementation", depName)
}
fun DependencyHandler.kapt(depName: String) {
add("kapt", depName)
}
fun DependencyHandler.compileOnly(depName: String) {
add("compileOnly", depName)
}
fun DependencyHandler.api(depName: String) {
add("api", depName)
}
fun DependencyHandler.daggerKotlin() {
DependencyInjection.Dagger.run {
implementation(runtime)
}
}
fun DependencyHandler.daggerAndroid() {
DependencyInjection.Dagger.run {
daggerKotlin()
implementation(android)
implementation(android_support)
kapt(compiler)
kapt(android_support_compiler)
}
}
fun DependencyHandler.daggerAssisted() {
DependencyInjection.Dagger.Assisted.run {
compileOnly(annotations)
kapt(processor)
}
}
fun DependencyHandler.baseDependencies() {
kotlinCoroutines()
daggerKotlin()
test()
arch()
}
fun DependencyHandler.baseAndroidDependencies() {
baseDependencies()
daggerAndroid()
testAndroid()
}
fun DependencyHandler.featureModuleBaseDependencies() {
androidDefault()
fragment()
lifeCycle()
arch()
naviagtion()
databinding()
daggerAssisted()
}
val Project.android: BaseExtension
get() = extensions.findByName("android") as? BaseExtension
?: error("$name is not an android module")

fun Project.androidLib(
default: (DefaultConfig.() -> Unit)? = null
) {
android.run {
compileSdkVersion(AppConfig.compileSdk)
defaultConfig {
AppConfig.run {
versionCode = vCode
versionName = vName
minSdk = minimumSdkVersion
targetSdk = targettSdkVersion
testInstrumentationRunner = androidTestInstrumentation
default?.invoke(this@defaultConfig)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dataBinding {
isEnabled = true
}
}
dependencies {
baseAndroidDependencies()
}
}

fun Project.androidApp(appId: String) {
androidLib {
applicationId = appId
}
}
fun Project.androidFeature(
default: (DefaultConfig.() -> Unit)? = null
) {
androidLib(default)
dependencies {
featureModuleBaseDependencies()
}
}
plugins {
GradlePluginId.apply {
id(ANDROID_APPLICATION)
kotlin(ANDROID)
kotlin(KAPT)
}
}
androidApp(AppConfig.applicationId)
plugins {
GradlePluginId.apply {
id(ANDROID_LIBRARY)
kotlin(ANDROID)
kotlin(KAPT)
id(NAVIGATION_SAFEARGS_KOTLIN)
id(ANDROID_EXTENSIONS)
}
}
androidLib {
buildConfigField("String", "BASE_URL", ""https://jsonplaceholder.typicode.com"")
}
plugins {
GradlePluginId.apply {
id(ANDROID_LIBRARY)
kotlin(ANDROID)
kotlin(KAPT)
id(NAVIGATION_SAFEARGS_KOTLIN)
id(ANDROID_EXTENSIONS)
}
}
androidFeature()

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba