import java.util.Properties import java.util.Date import java.text.SimpleDateFormat plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.hilt.android) alias(libs.plugins.kotlin.kapt) } // Clé de signature des releases : fichier local non versionné (voir keystore.properties.example). // Sans lui, la release est signée avec la clé de débogage (avertissement à la compilation). val keystoreProps = Properties().apply { val f = rootProject.file("keystore.properties") if (f.exists()) f.inputStream().use { load(it) } } val versionProps = Properties().apply { load(rootProject.file("version.properties").inputStream()) } android { namespace = "com.jttools.datacontrol" compileSdk = 34 defaultConfig { applicationId = "com.jttools.datacontrol" minSdk = 26 targetSdk = 34 versionCode = versionProps.getProperty("versionCode").toInt() versionName = versionProps.getProperty("versionName") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } // wireguard-go est natif : seuls les téléphones (ARM) sont visés, pour alléger l'APK. ndk { abiFilters += listOf("arm64-v8a", "armeabi-v7a") } buildConfigField("String", "BUILD_DATE", "\"${SimpleDateFormat("yyyy-MM-dd").format(Date())}\"") } signingConfigs { if (keystoreProps.getProperty("storeFile") != null) { create("release") { storeFile = file(keystoreProps.getProperty("storeFile")) storePassword = keystoreProps.getProperty("storePassword") keyAlias = keystoreProps.getProperty("keyAlias") keyPassword = keystoreProps.getProperty("keyPassword") } } } buildTypes { release { isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) signingConfig = signingConfigs.findByName("release") ?: run { logger.warn("⚠️ keystore.properties absent : release signée avec la clé de débogage") signingConfigs.getByName("debug") } } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } buildFeatures { compose = true buildConfig = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.14" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } // CHANGELOG.md est embarqué dans l'APK (assets) : l'onglet Journal de « À propos » le lit à l'exécution. val copyChangelog = tasks.register("copyChangelog") { from(rootProject.file("CHANGELOG.md")) into(layout.buildDirectory.dir("generated/changelogAssets")) } android.sourceSets.getByName("main").assets.srcDir(layout.buildDirectory.dir("generated/changelogAssets")) tasks.configureEach { if (name.startsWith("merge") && name.endsWith("Assets") || name.contains("lint", ignoreCase = true)) { dependsOn(copyChangelog) } } dependencies { implementation(libs.androidx.core.ktx) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) implementation(libs.androidx.material.icons.extended) implementation(libs.androidx.activity.compose) implementation(libs.androidx.lifecycle.viewmodel.compose) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.androidx.lifecycle.service) implementation(libs.androidx.navigation.compose) implementation(libs.hilt.android) kapt(libs.hilt.android.compiler) implementation(libs.androidx.hilt.navigation.compose) implementation(libs.androidx.datastore.preferences) implementation(libs.kotlinx.coroutines.android) implementation(libs.androidx.work.runtime.ktx) // Client WireGuard officiel (GoBackend : wireguard-go embarqué, VpnService fourni par la bibliothèque). implementation(libs.wireguard.tunnel) testImplementation(libs.junit) // org.json est fourni par Android à l'exécution, mais absent (bouchonné) des tests JVM. testImplementation(libs.org.json) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) }