import java.util.Properties plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.chaquo.python") } // El programa es el mismo que en el resto de versiones: se copia tal cual desde programa/cartera // (sin la carpeta de entidades concretas, que no se publica) antes de empaquetar. val programa = rootProject.projectDir.resolve("../../programa/cartera") val copiaDelPrograma = layout.buildDirectory.dir("caudal-python") val traerCaudal = tasks.register("traerCaudal") { from(programa) { exclude("extras/**", "**/__pycache__/**") into("cartera") } into(copiaDelPrograma) } // La firma de las versiones: un fichero firma.properties junto a este, que NO se versiona // (storeFile, storePassword, keyAlias, keyPassword). Sin él solo se puede construir la de pruebas. val firma = Properties().apply { val f = rootProject.file("firma.properties") if (f.isFile) f.inputStream().use { load(it) } } android { namespace = "com.huveme.caudal" compileSdk = 35 defaultConfig { applicationId = "com.huveme.caudal" minSdk = 26 targetSdk = 35 versionCode = 306 versionName = "0.3.6" ndk { abiFilters += listOf("arm64-v8a", "x86_64") // teléfonos de hoy y el emulador } } signingConfigs { if (firma.containsKey("storeFile")) { create("version") { storeFile = rootProject.file(firma.getProperty("storeFile")) storePassword = firma.getProperty("storePassword") keyAlias = firma.getProperty("keyAlias") keyPassword = firma.getProperty("keyPassword") } } } buildTypes { release { isMinifyEnabled = false signingConfig = signingConfigs.findByName("version") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } } chaquopy { defaultConfig { version = "3.12" pip { // Las mismas dependencias que el resto de versiones (programa/requirements.txt) install("requests>=2.31") install("beautifulsoup4>=4.12") install("lxml>=4.9") install("openpyxl>=3.1") install("cryptography>=38") install("certifi>=2026.10.19") } } sourceSets { getByName("main") { srcDir("src/main/python") srcDir(copiaDelPrograma) } } } // Que el programa esté copiado antes de que Chaquopy lo recoja tasks.matching { it.name.startsWith("merge") && it.name.endsWith("PythonSources") }.configureEach { dependsOn(traerCaudal) } dependencies { implementation("androidx.core:core-ktx:1.15.0") implementation("androidx.appcompat:appcompat:1.7.0") implementation("androidx.biometric:biometric:1.1.0") implementation("androidx.webkit:webkit:1.12.1") implementation("com.journeyapps:zxing-android-embedded:4.3.0") // leer el QR de enlace (sin servicios de Google) }