import java.util.Properties plugins { // Android Application? id("com.android.application") // Support for kotlin in Android kotlin("android") // Data Injection id("dagger.hilt.android.plugin") // Safe Navigation id("androidx.navigation.safeargs") // OSS Licenses id("com.google.android.gms.oss-licenses-plugin") // keep at bottom kotlin("kapt") } // from: https://discuss.kotlinlang.org/t/use-git-hash-as-version-number-in-build-gradle-kts/19818/8 fun String.runCommand( workingDir: File = File("."), timeoutAmount: Long = 60, timeoutUnit: TimeUnit = TimeUnit.SECONDS ): String = ProcessBuilder(split("\\s(?=(?:[^'\"`]*(['\"`])[^'\"`]*\\1)*[^'\"`]*$)".toRegex())) .directory(workingDir) .redirectOutput(ProcessBuilder.Redirect.PIPE) .redirectError(ProcessBuilder.Redirect.PIPE) .start() .apply { waitFor(timeoutAmount, timeoutUnit) } .run { val error = errorStream.bufferedReader().readText().trim() if (error.isNotEmpty()) { return@run "" } inputStream.bufferedReader().readText().trim() } // The application ID val appID = "com.dzeio.openhealth" // the application supported languages val locales = listOf("en", "fr") // minimum application required SDK version to run val sdkMin = 21 // target SDK version val sdkTarget = 33 val branch = "git rev-parse --abbrev-ref HEAD".runCommand(workingDir = rootDir) var tag = "git tag -l --points-at HEAD".runCommand(workingDir = rootDir) if (tag == "") { tag = "not tagged" } val commitId = "git rev-parse HEAD".runCommand(workingDir = rootDir) .subSequence(0, 7) android { signingConfigs { create("release") { try { val keystoreProperties = Properties().apply { load(rootProject.file("./keystore.properties").reader()) } if (keystoreProperties.isNotEmpty()) { storePassword = keystoreProperties["storePassword"] as String keyPassword = keystoreProperties["keyPassword"] as String keyAlias = keystoreProperties["keyAlias"] as String storeFile = file(keystoreProperties["storeFile"] as String) } } catch (_: Exception) {} } } compileSdk = sdkTarget defaultConfig { // App ID applicationId = appID // Android 5 Lollipop minSdk = sdkMin // Android 12 targetSdk = sdkTarget // Semantic Versioning versionName = "0.1.0" versionCode = 1 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" kapt { arguments { arg("room.schemaLocation", "$projectDir/schemas") } } buildConfigField( "String[]", "LOCALES", "new String[]{\"" + locales.joinToString("\",\"") + "\"}" ) resourceConfigurations += locales buildConfigField("String", "BRANCH", "\"$branch\"") buildConfigField("String", "TAG", "\"$tag\"") buildConfigField("String", "COMMIT", "\"$commitId\"") } buildTypes { getByName("release") { // Slimmer version isMinifyEnabled = true isShrinkResources = true isDebuggable = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) signingConfig = signingConfigs.getByName("release") } getByName("debug") { applicationIdSuffix = ".dev" versionNameSuffix = "-dev" isDebuggable = true // make it debuggable isRenderscriptDebuggable = true // Optimization Level renderscriptOptimLevel = 0 } } // Compile using JAVA 8 compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } // Enable View Binding and Data Binding buildFeatures { viewBinding = true dataBinding = true } namespace = appID } kapt { correctErrorTypes = true } dependencies { // Dzeio Charts implementation("com.dzeio:charts:fe20f90654") // Dzeio Crash Handler implementation("com.dzeio:crashhandler:1.0.1") // Core dependencies implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.appcompat:appcompat:1.7.0-alpha01") implementation("javax.inject:javax.inject:1") implementation("com.google.android.material:material:1.9.0-alpha01") implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.5.1") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1") // Coroutines implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") // Settings implementation("androidx.preference:preference-ktx:1.2.0") // DataStore implementation("androidx.datastore:datastore:1.0.0") // Navigation implementation("androidx.navigation:navigation-fragment-ktx:2.5.3") implementation("androidx.navigation:navigation-ui-ktx:2.5.3") // Paging implementation("androidx.paging:paging-runtime:3.1.1") implementation("androidx.paging:paging-runtime-ktx:3.1.1") // Services implementation("androidx.work:work-runtime-ktx:2.7.1") implementation("androidx.core:core-ktx:1.9.0") // Tests testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") // Hilt implementation("com.google.dagger:hilt-android:2.44.2") kapt("com.google.dagger:hilt-compiler:2.44.2") // ROOM implementation("androidx.room:room-runtime:2.5.0") kapt("androidx.room:room-compiler:2.5.0") implementation("androidx.room:room-ktx:2.5.0") testImplementation("androidx.room:room-testing:2.5.0") // Futures implementation("com.google.guava:guava:31.1-jre") implementation("androidx.concurrent:concurrent-futures:1.1.0") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.4") // OSS Licenses implementation("com.google.android.gms:play-services-oss-licenses:17.0.0") // Retrofit (Open Food Fact) implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-gson:2.9.0") implementation("com.squareup.okhttp3:logging-interceptor:4.10.0") }