plugins { id("com.android.application") id("kotlin-android") id("kotlin-kapt") id("kotlin-parcelize") } apply(plugin = "dagger.hilt.android.plugin") apply(plugin = "androidx.navigation.safeargs.kotlin") android { compileSdk = ProjectConfig.compileSdk defaultConfig { applicationId = ProjectConfig.packageName minSdk = ProjectConfig.minSdk targetSdk = ProjectConfig.targetSdk versionCode = ProjectConfig.Version.code + 0 // Base app versionName = ProjectConfig.Version.name testInstrumentationRunner = "eu.darken.capod.HiltTestRunner" } signingConfigs { val basePath = File(System.getProperty("user.home"), ".appconfig/${ProjectConfig.packageName}") create("releaseFoss") { setupCredentials(File(basePath, "signing-foss.properties")) } create("releaseGplay") { setupCredentials(File(basePath, "signing-gplay-upload.properties")) } } flavorDimensions.add("version") productFlavors { create("foss") { dimension = "version" signingConfig = signingConfigs["releaseFoss"] } create("gplay") { dimension = "version" signingConfig = signingConfigs["releaseGplay"] extra["useBugsnag"] = true } } setupBugsnagPlugin() buildTypes { val customProguardRules = fileTree(File(projectDir, "proguard")) { include("*.pro") } debug { isMinifyEnabled = false isShrinkResources = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) proguardFiles(*customProguardRules.toList().toTypedArray()) proguardFiles("proguard-rules-debug.pro") } create("beta") { lint { abortOnError = true fatal.add("StopShip") } isMinifyEnabled = true isShrinkResources = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) proguardFiles(*customProguardRules.toList().toTypedArray()) } release { lint { abortOnError = true fatal.add("StopShip") } isMinifyEnabled = true isShrinkResources = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) proguardFiles(*customProguardRules.toList().toTypedArray()) } } buildOutputs.all { val variantOutputImpl = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl val variantName: String = variantOutputImpl.name if (listOf("release", "beta").any { variantName.toLowerCase().contains(it) }) { val outputFileName = ProjectConfig.packageName + "-v${defaultConfig.versionName}-${defaultConfig.versionCode}" + "-${variantName.toUpperCase()}.apk" variantOutputImpl.outputFileName = outputFileName } } buildFeatures { viewBinding = true } compileOptions { isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" freeCompilerArgs = freeCompilerArgs + listOf( "-opt-in=kotlin.ExperimentalStdlibApi", "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", "-opt-in=kotlinx.coroutines.FlowPreview", "-opt-in=kotlin.time.ExperimentalTime", "-opt-in=kotlin.RequiresOptIn" ) } testOptions { unitTests { isIncludeAndroidResources = true } tasks.withType { useJUnitPlatform() } } } dependencies { implementation(project(":app-common")) coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") addBaseKotlin() addDagger() addMoshi() addOkio() addBaseAndroid() addBaseAndroidUi() addNavigation() addBaseWorkManager() addTesting() "gplayImplementation"("com.android.billingclient:billing:4.0.0") "gplayImplementation"("com.bugsnag:bugsnag-android:5.9.2") "gplayImplementation"("com.getkeepsafe.relinker:relinker:1.4.3") }