buildscript { apply from: "dependencies.gradle" repositories { Dependencies._repositories.call(it) } dependencies { classpath Dependencies.google.androidGradlePlugin classpath Dependencies.mavenCentral.kotlinGradlePlugin classpath Dependencies.mavenCentral.sqldelightGradlePlugin classpath Dependencies.mavenCentral.kotlinSerializationGradlePlugin classpath Dependencies.google.firebaseCrashlyticsPlugin } } def launchTask = getGradle() .getStartParameter() .getTaskRequests() .toString() .toLowerCase() def isReleaseBuild = launchTask.contains("release") ext.isDebugBuild = !isReleaseBuild subprojects { tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs = [ '-opt-in=kotlin.contracts.ExperimentalContracts', '-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi', ] } } } task clean(type: Delete) { delete rootProject.buildDir } ext.applyMatrixServiceModule = { project -> project.apply plugin: 'kotlin' project.apply plugin: 'org.jetbrains.kotlin.plugin.serialization' def dependencies = project.dependencies dependencies.api project.project(":matrix:matrix") dependencies.api project.project(":matrix:common") dependencies.implementation project.project(":matrix:matrix-http") dependencies.implementation Dependencies.mavenCentral.kotlinSerializationJson } ext.applyLibraryPlugins = { project -> project.apply plugin: 'com.android.library' project.apply plugin: 'kotlin-android' } ext.androidSdkVersion = 33 ext.applyCommonAndroidParameters = { project -> def android = project.android android.compileSdk androidSdkVersion android.compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 incremental = true } android.defaultConfig { minSdkVersion 24 targetSdkVersion androidSdkVersion } } ext.applyLibraryModuleOptimisations = { project -> project.android { variantFilter { variant -> if (variant.name == "debug") { variant.ignore = true } } buildFeatures { buildConfig = false dataBinding = false aidl = false renderScript = false resValues = false shaders = false viewBinding = false } } } ext.applyCompose = { project -> def dependencies = project.dependencies dependencies.implementation Dependencies.google.androidxComposeUi dependencies.implementation Dependencies.google.androidxComposeFoundation dependencies.implementation Dependencies.google.androidxComposeMaterial dependencies.implementation Dependencies.google.androidxComposeIconsExtended dependencies.implementation Dependencies.google.androidxActivityCompose def android = project.android android.buildFeatures.compose = true android.composeOptions { kotlinCompilerExtensionVersion = Dependencies.google.kotlinCompilerExtensionVersion } } ext.applyAndroidComposeLibraryModule = { project -> applyAndroidLibraryModule(project) applyCompose(project) } ext.applyAndroidLibraryModule = { project -> applyLibraryPlugins(project) applyCommonAndroidParameters(project) applyLibraryModuleOptimisations(project) } ext.applyCrashlyticsIfRelease = { project -> if (isReleaseBuild && !isFoss()) { project.apply plugin: 'com.google.firebase.crashlytics' project.afterEvaluate { project.tasks.withType(com.google.firebase.crashlytics.buildtools.gradle.tasks.UploadMappingFileTask).configureEach { it.googleServicesResourceRoot.set(project.file("src/release/res/")) } } } } ext.kotlinTest = { dependencies -> dependencies.testImplementation Dependencies.mavenCentral.kluent dependencies.testImplementation Dependencies.mavenCentral.kotlinTest dependencies.testImplementation "org.jetbrains.kotlin:kotlin-test-junit:1.6.10" dependencies.testImplementation 'io.mockk:mockk:1.12.8' dependencies.testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4' dependencies.testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1' dependencies.testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.1' } ext.kotlinFixtures = { dependencies -> dependencies.testFixturesImplementation 'io.mockk:mockk:1.12.7' dependencies.testFixturesImplementation Dependencies.mavenCentral.kluent dependencies.testFixturesImplementation Dependencies.mavenCentral.kotlinCoroutinesCore } ext.androidImportFixturesWorkaround = { project, fixtures -> project.dependencies.testImplementation(project.dependencies.testFixtures(fixtures)) project.dependencies.testImplementation fixtures.files("build/libs/${fixtures.name}-test-fixtures.jar") project.dependencies.testImplementation fixtures.files("build/libs/${fixtures.name}.jar") } ext.isFoss = { return rootProject.hasProperty("foss") } ext.firebase = { dependencies, name -> if (isFoss()) { dependencies.implementation(project(":domains:firebase:$name-noop")) } else { dependencies.implementation(project(":domains:firebase:$name")) } } if (launchTask.contains("codeCoverageReport".toLowerCase())) { apply from: 'tools/coverage.gradle' }