Skip to content

Instantly share code, notes, and snippets.

@f3401pal
Last active January 5, 2024 13:53
Show Gist options
  • Save f3401pal/8aa468192a4d35642e20abf9dbd8de4c to your computer and use it in GitHub Desktop.
Save f3401pal/8aa468192a4d35642e20abf9dbd8de4c to your computer and use it in GitHub Desktop.
Multi-module Android project with Kotlin DSL for Gradle
plugins {
`android-base-app`
`android-base`
id("io.fabric")
}
android {
defaultConfig {
versionCode = 20
versionName = "1.6.3"
}
buildTypes {
getByName("debug") {
isMinifyEnabled = false
}
getByName("release") {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
}
}
dependencies {
implementation(project(":data"))
implementation(project(":domain"))
appCompat()
lifecycle()
implementation(Dependencies.ANDROID_MATERIAL)
implementation(Dependencies.ANDROID_BROWSER)
implementation(Dependencies.ANDROID_WORK_MANAGER)
implementation(Dependencies.GMS_MAP)
implementation(Dependencies.CRASHLYTICS)
firebase()
// Dagger Android dependencies
dagger()
}
apply(plugin = "com.google.gms.google-services")
plugins {
id("com.android.library")
kotlin("android")
}
android {
compileSdkVersion(Versions.TARGET_ANDROID_SDK)
defaultConfig {
minSdkVersion(Versions.MIN_ANDROID_SDK)
targetSdkVersion(Versions.TARGET_ANDROID_SDK)
versionCode = 1
versionName = "1.0"
consumerProguardFiles("consumer-rules.pro")
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
val options = this as KotlinJvmOptions
options.jvmTarget = "1.8"
}
}
plugins {
kotlin("android.extensions")
kotlin("kapt")
}
dependencies {
implementation(Dependencies.TIMBER)
implementation(Dependencies.COROUTINES_ANDROID)
}
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
google()
}
dependencies {
// android gradle plugin, required by custom plugin
implementation("com.android.tools.build:gradle:3.5.3")
// kotlin plugin, required by custom plugin
implementation(kotlin("gradle-plugin", "1.3.61"))
}
package com.f3401pal.cbe
import org.gradle.api.artifacts.dsl.DependencyHandler
object Dependencies {
const val ANDROID_APP_COMPAT = "androidx.appcompat:appcompat:${Versions.Androidx.APP_COMPAT}"
const val ANDROID_CORE_KTX = "androidx.core:core-ktx:${Versions.Androidx.CORE_KTX}"
const val ANDROID_WORK_MANAGER = "androidx.work:work-runtime-ktx:${Versions.Androidx.WORK_MANAGER}"
const val ANDROID_BROWSER = "androidx.browser:browser:${Versions.Androidx.BROWSER}"
const val ANDROID_MATERIAL = "com.google.android.material:material:${Versions.MATERIAL_ANDROID}"
const val GMS_MAP = "com.google.android.gms:play-services-maps:${Versions.GMS_MAP}"
const val CRASHLYTICS = "com.crashlytics.sdk.android:crashlytics:${Versions.CRASHLYTICS}"
const val ANDROID_ROOM_RUNTIME = "androidx.room:room-runtime:${Versions.Androidx.ROOM}"
const val ANDROID_ROOM_KTX = "androidx.room:room-ktx:${Versions.Androidx.ROOM}"
const val ANDROID_ROOM_COMPILER = "androidx.room:room-compiler:${Versions.Androidx.ROOM}"
const val ANDROID_LIFECYCLE_RUNTIME = "androidx.lifecycle:lifecycle-runtime:${Versions.Androidx.LIFECYCLE}"
const val ANDROID_LIFECYCLE_VIEWMODEL = "androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.Androidx.LIFECYCLE}"
const val ANDROID_LIFECYCLE_EX = "androidx.lifecycle:lifecycle-extensions:${Versions.Androidx.LIFECYCLE}"
const val ANDROID_LIFECYCLE_LIVEDATA = "androidx.lifecycle:lifecycle-livedata-ktx:${Versions.Androidx.LIFECYCLE}"
const val JSOUP = "org.jsoup:jsoup:${Versions.JSOUP}"
const val TIMBER = "com.jakewharton.timber:timber:${Versions.TIMBER}"
const val RETROFIT = "com.squareup.retrofit2:retrofit:${Versions.RETROFIT}"
const val RETROFIT_CONVERTER_MOSHI = "com.squareup.retrofit2:converter-moshi:${Versions.RETROFIT}"
const val MOSHI = "com.squareup.moshi:moshi-kotlin:${Versions.MOSHI}"
const val MOSHI_CODEGEN = "com.squareup.moshi:moshi-kotlin-codegen:${Versions.MOSHI}"
const val COROUTINES_ANDROID = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.COROUTINES_ANDROID}"
const val OKHTTP_LOGGER = "com.squareup.okhttp3:logging-interceptor:${Versions.OKHTTP3}"
const val DAGGER = "com.google.dagger:dagger:${Versions.DAGGER2}"
const val DAGGER_COMPILER = "com.google.dagger:dagger-compiler:${Versions.DAGGER2}"
const val DAGGER_ANDROID = "com.google.dagger:dagger-android-support:${Versions.DAGGER2}"
const val DAGGER_ANDROID_PROCESSOR = "com.google.dagger:dagger-android-processor:${Versions.DAGGER2}"
const val FIREBASE_CORE = "com.google.firebase:firebase-core:${Versions.Firebase.CORE}"
const val FIREBASE_ADS = "com.google.firebase:firebase-ads:${Versions.Firebase.ADS}"
const val FIREBASE_APP_INDEXING = "com.google.firebase:firebase-appindexing:${Versions.Firebase.APP_INDEX}"
}
fun DependencyHandler.firebase() {
implementation(Dependencies.FIREBASE_CORE)
implementation(Dependencies.FIREBASE_ADS)
implementation(Dependencies.FIREBASE_APP_INDEXING)
}
fun DependencyHandler.dagger() {
compileOnly(Dependencies.DAGGER)
kapt(Dependencies.DAGGER_COMPILER)
implementation(Dependencies.DAGGER_ANDROID)
kapt(Dependencies.DAGGER_ANDROID_PROCESSOR)
}
fun DependencyHandler.appCompat() {
implementation(Dependencies.ANDROID_APP_COMPAT)
implementation(Dependencies.ANDROID_CORE_KTX)
}
fun DependencyHandler.lifecycle() {
implementation(Dependencies.ANDROID_LIFECYCLE_RUNTIME)
implementation(Dependencies.ANDROID_LIFECYCLE_EX)
implementation(Dependencies.ANDROID_LIFECYCLE_VIEWMODEL)
implementation(Dependencies.ANDROID_LIFECYCLE_LIVEDATA)
}
fun DependencyHandler.retrofit() {
implementation(Dependencies.RETROFIT)
implementation(Dependencies.RETROFIT_CONVERTER_MOSHI)
implementation(Dependencies.OKHTTP_LOGGER)
}
fun DependencyHandler.moshi() {
implementation(Dependencies.MOSHI)
kapt(Dependencies.MOSHI_CODEGEN)
}
fun DependencyHandler.room() {
api(Dependencies.ANDROID_ROOM_RUNTIME)
implementation(Dependencies.ANDROID_ROOM_KTX)
kapt(Dependencies.ANDROID_ROOM_COMPILER)
}
fun DependencyHandler.implementation(depName: String) {
add("implementation", depName)
}
private fun DependencyHandler.kapt(depName: String) {
add("kapt", depName)
}
private fun DependencyHandler.compileOnly(depName: String) {
add("compileOnly", depName)
}
private fun DependencyHandler.api(depName: String) {
add("api", depName)
}
package com.f3401pal.cbe
object Versions {
const val MIN_ANDROID_SDK = 21
const val TARGET_ANDROID_SDK = 29
object Androidx {
const val APP_COMPAT = "1.1.0"
const val LIFECYCLE = "2.2.0"
const val CORE_KTX = "1.1.0"
const val WORK_MANAGER = "2.3.0"
const val BROWSER = "1.2.0"
const val ROOM = "2.2.3"
}
object Firebase {
const val CORE = "17.2.2"
const val ADS = "18.3.0"
const val APP_INDEX = "19.1.0"
}
const val CRASHLYTICS = "2.10.1"
const val GMS_MAP = "17.0.0"
const val MATERIAL_ANDROID = "1.2.0-alpha04"
const val COROUTINES_ANDROID = "1.3.3"
const val DAGGER2 = "2.26"
const val JSOUP = "1.12.1"
const val TIMBER = "4.7.1"
const val RETROFIT = "2.7.1"
const val MOSHI = "1.9.2"
const val OKHTTP3 = "4.3.1"
}
plugins {
`android-base-lib`
`android-base`
}
dependencies {
appCompat()
// Room
room()
}
plugins {
`android-base-lib`
`android-base`
}
dependencies {
implementation(project(":data"))
appCompat()
implementation(Dependencies.ANDROID_WORK_MANAGER)
implementation(Dependencies.JSOUP)
// Network
retrofit()
// JSON parser
moshi()
}
@jimmyFlash
Copy link

I'm getting an error when trying to create the buildSrc\android-base.gradle.kts

Caused by: java.lang.Exception: The plugins {} block must not be used here. If you need to apply a plugin imperatively, please use apply<PluginType>() or apply(plugin = "id") instead. at org.gradle.kotlin.dsl.support.CompiledKotlinBuildScriptKt.invalidPluginsCall(CompiledKotlinBuildScript.kt:143) at org.gradle.kotlin.dsl.support.CompiledKotlinBuildScript.plugins(CompiledKotlinBuildScript.kt:61) at Android_base_gradle.<init>(Unknown Source) ... 121 more ], scriptFile = ...\buildSrc\android-base.gradle.kts)

i'm using AS 4.0, Gradle plugin 4.0.0 with koltin 1.3.71

@wsdydeni
Copy link

wsdydeni commented Nov 8, 2021

I'm getting an error when trying to create the buildSrc\android-base.gradle.kts

Caused by: java.lang.Exception: The plugins {} block must not be used here. If you need to apply a plugin imperatively, please use apply<PluginType>() or apply(plugin = "id") instead. at org.gradle.kotlin.dsl.support.CompiledKotlinBuildScriptKt.invalidPluginsCall(CompiledKotlinBuildScript.kt:143) at org.gradle.kotlin.dsl.support.CompiledKotlinBuildScript.plugins(CompiledKotlinBuildScript.kt:61) at Android_base_gradle.<init>(Unknown Source) ... 121 more ], scriptFile = ...\buildSrc\android-base.gradle.kts)

i'm using AS 4.0, Gradle plugin 4.0.0 with koltin 1.3.71

look here diffplug/spotless#740 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment