187 lines
6.5 KiB
Kotlin
187 lines
6.5 KiB
Kotlin
import java.io.FileInputStream
|
|
import java.util.Properties
|
|
|
|
plugins {
|
|
alias(libs.plugins.android.application)
|
|
alias(libs.plugins.kotlin.compose)
|
|
alias(libs.plugins.kotlin.serialization)
|
|
alias(libs.plugins.firebase.crashlytics.gradle)
|
|
// alias(libs.plugins.paparazzi) — temporarily disabled until compatible version is available
|
|
}
|
|
|
|
android {
|
|
namespace = "com.kordant.android"
|
|
compileSdk {
|
|
version = release(36) {
|
|
minorApiLevel = 1
|
|
}
|
|
}
|
|
|
|
defaultConfig {
|
|
applicationId = "com.kordant.android"
|
|
minSdk = 26
|
|
targetSdk = 36
|
|
versionCode = 1
|
|
versionName = "1.0"
|
|
|
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
|
|
buildConfigField("String", "API_BASE_URL", "\"http://10.0.2.2:3000\"")
|
|
buildConfigField("String", "API_STAGING_URL", "\"https://staging.api.kordant.com\"")
|
|
buildConfigField("String", "API_PRODUCTION_URL", "\"https://api.kordant.com\"")
|
|
|
|
// Resource config for supported languages (reduces APK size)
|
|
// resourceConfigurations.addAll(listOf("en"))
|
|
}
|
|
|
|
// Load signing configuration from key.properties
|
|
// This file is NOT committed — see key.properties.template
|
|
val keystorePropertiesFile = rootProject.file("key.properties")
|
|
val keystoreProperties = Properties()
|
|
if (keystorePropertiesFile.exists()) {
|
|
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
|
|
}
|
|
|
|
signingConfigs {
|
|
create("release") {
|
|
if (keystoreProperties.isNotEmpty()) {
|
|
storeFile = file(keystoreProperties["storeFile"] as String)
|
|
storePassword = keystoreProperties["storePassword"] as String
|
|
keyAlias = keystoreProperties["keyAlias"] as String
|
|
keyPassword = keystoreProperties["keyPassword"] as String
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
debug {
|
|
isMinifyEnabled = false
|
|
buildConfigField("String", "API_BASE_URL", "\"http://10.0.2.2:3000\"")
|
|
applicationIdSuffix = ".debug"
|
|
versionNameSuffix = "-debug"
|
|
}
|
|
release {
|
|
// Enable R8 code shrinking, resource shrinking, and obfuscation
|
|
isMinifyEnabled = true
|
|
isShrinkResources = true
|
|
proguardFiles(
|
|
getDefaultProguardFile("proguard-android-optimize.txt"),
|
|
"proguard-rules.pro"
|
|
)
|
|
buildConfigField("String", "API_BASE_URL", "\"https://api.kordant.com\"")
|
|
|
|
// Signing config for release builds
|
|
// Requires key.properties (see key.properties.template)
|
|
signingConfig = signingConfigs.getByName("release")
|
|
}
|
|
}
|
|
|
|
flavorDimensions += "environment"
|
|
productFlavors {
|
|
create("dev") {
|
|
dimension = "environment"
|
|
applicationIdSuffix = ".dev"
|
|
versionNameSuffix = "-dev"
|
|
buildConfigField("String", "API_BASE_URL", "\"http://10.0.2.2:3000\"")
|
|
}
|
|
create("prod") {
|
|
dimension = "environment"
|
|
buildConfigField("String", "API_BASE_URL", "\"https://api.kordant.com\"")
|
|
}
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility = JavaVersion.VERSION_11
|
|
targetCompatibility = JavaVersion.VERSION_11
|
|
}
|
|
buildFeatures {
|
|
compose = true
|
|
buildConfig = true
|
|
}
|
|
lint {
|
|
baseline = file("lint-baseline.xml")
|
|
abortOnError = false
|
|
}
|
|
packaging {
|
|
resources {
|
|
excludes += "/META-INF/{AL2.0,LGPL2.1}"
|
|
excludes += "META-INF/versions/9/previous-compilation-data.bin"
|
|
}
|
|
}
|
|
// Resource config for supported languages (reduces APK size)
|
|
androidResources {
|
|
localeFilters += "en"
|
|
}
|
|
|
|
testOptions {
|
|
unitTests {
|
|
isIncludeAndroidResources = true
|
|
}
|
|
}
|
|
|
|
// Resources directory for screenshot golden images
|
|
sourceSets {
|
|
getByName("test") {
|
|
resources {
|
|
setSrcDirs(listOf("src/test/screenshots"))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Paparazzi screenshot testing configuration
|
|
// FIXME: Paparazzi plugin not available in all environments
|
|
// paparazzi {
|
|
// theme = "android:style/Theme.Material.Light.NoActionBar"
|
|
// renderMode = "SHRINK"
|
|
// }
|
|
|
|
dependencies {
|
|
implementation(libs.androidx.core.ktx)
|
|
implementation(libs.androidx.lifecycle.runtime.ktx)
|
|
implementation(libs.androidx.activity.compose)
|
|
implementation(libs.androidx.navigation.compose)
|
|
implementation(platform(libs.androidx.compose.bom))
|
|
implementation(libs.androidx.compose.ui)
|
|
implementation(libs.androidx.compose.ui.graphics)
|
|
implementation(libs.androidx.compose.ui.tooling.preview)
|
|
implementation(libs.androidx.compose.material3)
|
|
implementation(libs.androidx.compose.material3.adaptive.navigation.suite)
|
|
implementation(libs.androidx.compose.material.icons.core)
|
|
implementation(libs.androidx.paging.runtime)
|
|
implementation(libs.androidx.paging.compose)
|
|
implementation(libs.coil.compose)
|
|
implementation(libs.lottie.compose)
|
|
implementation(libs.androidx.security.crypto)
|
|
implementation(libs.androidx.biometric)
|
|
implementation(libs.androidx.datastore.preferences)
|
|
implementation(libs.okhttp)
|
|
implementation(libs.okhttp.logging.interceptor)
|
|
implementation(libs.gson)
|
|
implementation(libs.play.services.auth)
|
|
implementation(libs.play.integrity)
|
|
implementation(libs.retrofit)
|
|
implementation(libs.retrofit.kotlinx.serialization.converter)
|
|
implementation(libs.kotlinx.serialization.json)
|
|
implementation(libs.work.runtime.ktx)
|
|
implementation(platform(libs.firebase.bom))
|
|
implementation(libs.firebase.messaging)
|
|
implementation(libs.firebase.crashlytics)
|
|
debugImplementation("androidx.profileinstaller:profileinstaller:1.4.1")
|
|
implementation("androidx.profileinstaller:profileinstaller:1.4.1")
|
|
|
|
testImplementation(libs.junit)
|
|
testImplementation(libs.kotlinx.coroutines.test)
|
|
testImplementation(libs.truth)
|
|
testImplementation(libs.okhttp.mockwebserver)
|
|
testImplementation(libs.work.testing)
|
|
|
|
androidTestImplementation(libs.androidx.junit)
|
|
androidTestImplementation(libs.androidx.espresso.core)
|
|
androidTestImplementation(platform(libs.androidx.compose.bom))
|
|
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
|
|
androidTestImplementation(libs.benchmark.macro.junit4)
|
|
debugImplementation(libs.androidx.compose.ui.tooling)
|
|
debugImplementation(libs.androidx.compose.ui.test.manifest)
|
|
}
|