import java.util.Properties import java.io.FileInputStream plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.serialization) } android { namespace = "swiss.qpq.gajumobile" compileSdk { version = release(36) { minorApiLevel = 1 } } defaultConfig { applicationId = "swiss.qpq.gajumobile" minSdk = 26 targetSdk = 36 versionCode = 1 versionName = "0.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags("") // 16 KB page alignment for Android 15/16+ arguments("-DCMAKE_SHARED_LINKER_FLAGS=-Wl,-z,max-page-size=16384") } } } val keystorePropertiesFile = rootProject.file("local.properties") val keystoreProperties = Properties() if (keystorePropertiesFile.exists()) { keystoreProperties.load(FileInputStream(keystorePropertiesFile)) } signingConfigs { create("release") { storeFile = keystoreProperties.getProperty("release.store.file")?.trim()?.removeSurrounding("\"")?.let { file(it) } storePassword = keystoreProperties.getProperty("release.store.password")?.trim()?.removeSurrounding("\"") keyAlias = keystoreProperties.getProperty("release.key.alias")?.trim()?.removeSurrounding("\"") keyPassword = keystoreProperties.getProperty("release.key.password")?.trim()?.removeSurrounding("\"") enableV1Signing = true enableV2Signing = true enableV3Signing = true enableV4Signing = true } } externalNativeBuild { cmake { path = file("src/main/cpp/CMakeLists.txt") version = "3.22.1" } } buildTypes { release { if (signingConfigs.getByName("release").storeFile != null) { signingConfig = signingConfigs.getByName("release") } isDebuggable = false // Ensure no testOnly attribute is added optimization { enable = false } } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } buildFeatures { compose = true } androidResources { generateLocaleConfig = true } sourceSets { getByName("main") { java.srcDir("../gm-java/src/main/java") } } } androidComponents { onVariants { variant -> variant.outputs.forEach { output -> // This sets the filename for both debug and release output.outputFileName.set("GajuMobile-${android.defaultConfig.versionName}-Android.apk") } } } dependencies { implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.splashscreen) implementation(libs.androidx.biometric) implementation(libs.play.services.code.scanner) implementation(libs.androidx.lifecycle.process) implementation(libs.kotlinx.serialization.json) testImplementation(libs.junit) androidTestImplementation(libs.androidx.compose.ui.test.junit4) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.junit) debugImplementation(libs.androidx.compose.ui.test.manifest) debugImplementation(libs.androidx.compose.ui.tooling) }