release.sh hace el ciclo entero y siempre igual, se lance a mano o desde un runner: empaqueta el backend, compila, verifica y publica la release en gitea. Las verificaciones no son decorativas, son las que han cazado fallos reales en esta rama: una APK puede compilar, instalar y arrancar sin el backend dentro, o haber perdido los permisos de camara y quedarse sin videollamadas. Se comprueba que estan el backend y libnode.so, los dos permisos, y la firma. El versionCode sale del numero de commits, que sube solo; el versionName, de package.json, que es de donde lo saca tambien el backend, para que la version que muestra la aplicacion no pueda discrepar de la de la APK. Los dos se pasan por entorno a Gradle en vez de editarlos a mano. La release se crea como borrador a proposito: publicar una APK firmada sin que nadie la mire no deberia poder pasar por descuido. El workflow de gitea no se dispara con cada commit (la APK son mas de 100 MB) y necesita un runner con el SDK de Android; queda documentado en su cabecera.
61 lines
1.8 KiB
Kotlin
61 lines
1.8 KiB
Kotlin
plugins {
|
|
id("com.android.application")
|
|
id("org.jetbrains.kotlin.android")
|
|
}
|
|
|
|
android {
|
|
// El .so nativo exporta Java_com_solarnethub_oasis_OasisActivity_startNodeWithArguments,
|
|
// asi que la clase puente tiene que vivir en ese paquete para que el simbolo resuelva.
|
|
// El applicationId si es propio: la app se instala junto a la oficial sin pisarla.
|
|
namespace = "com.solarnethub.oasis"
|
|
compileSdk = 35
|
|
|
|
defaultConfig {
|
|
applicationId = "net.laenre.oasis"
|
|
minSdk = 24
|
|
targetSdk = 35
|
|
// el pipeline los pasa por entorno; a mano valen los de aqui
|
|
versionCode = (System.getenv("OASIS_VERSION_CODE") ?: "1").toInt()
|
|
versionName = System.getenv("OASIS_VERSION_NAME") ?: "0.9.5"
|
|
ndk { abiFilters += listOf("arm64-v8a") }
|
|
}
|
|
|
|
signingConfigs {
|
|
create("release") {
|
|
val ks = System.getenv("OASIS_KEYSTORE")
|
|
if (ks != null) {
|
|
storeFile = file(ks)
|
|
storePassword = System.getenv("OASIS_KEYSTORE_PASS")
|
|
keyAlias = System.getenv("OASIS_KEY_ALIAS") ?: "oasis"
|
|
keyPassword = System.getenv("OASIS_KEY_PASS") ?: System.getenv("OASIS_KEYSTORE_PASS")
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
isMinifyEnabled = false
|
|
if (System.getenv("OASIS_KEYSTORE") != null) signingConfig = signingConfigs.getByName("release")
|
|
}
|
|
}
|
|
|
|
buildFeatures { buildConfig = true }
|
|
|
|
packaging {
|
|
jniLibs {
|
|
// libnode.so son 49 MB: sin comprimir se carga por mmap y arranca mas rapido
|
|
useLegacyPackaging = false
|
|
}
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility = JavaVersion.VERSION_17
|
|
targetCompatibility = JavaVersion.VERSION_17
|
|
}
|
|
kotlinOptions { jvmTarget = "17" }
|
|
}
|
|
|
|
dependencies {
|
|
implementation("androidx.appcompat:appcompat:1.7.0")
|
|
implementation("androidx.core:core-ktx:1.13.1")
|
|
}
|