SophaxChat · Code Richard Metzner

11 · Android

android/app/build.gradle.kts

107 lines · Kotlin script

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.kotlin.compose)
    alias(libs.plugins.kotlin.serialization)
}

android {
    namespace = "com.sophax.sophaxchat"
    compileSdk = 35

    defaultConfig {
        applicationId = "com.sophax.sophaxchat"
        minSdk = 26
        targetSdk = 35
        versionCode = 1
        versionName = "1.0"
    }

    signingConfigs {
        create("release") {
            // Hodnoty načti z prostředí (CI) nebo lokálního local.properties — nikdy ne z kódu
            val keystorePath  = System.getenv("KEYSTORE_PATH")  ?: rootProject.file("keystore.jks").absolutePath
            val keystorePass  = System.getenv("KEYSTORE_PASSWORD") ?: ""
            val keyAlias      = System.getenv("KEY_ALIAS")         ?: "sophaxchat"
            val keyPass       = System.getenv("KEY_PASSWORD")       ?: ""
            if (File(keystorePath).exists() && keystorePass.isNotEmpty()) {
                storeFile     = File(keystorePath)
                storePassword = keystorePass
                this.keyAlias      = keyAlias
                keyPassword   = keyPass
            }
        }
    }

    buildTypes {
        release {
            signingConfig   = signingConfigs.getByName("release")
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = "11"
    }

    buildFeatures {
        compose = true
    }

    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
            excludes += "META-INF/versions/9/OSGI-INF/MANIFEST.MF"
        }
    }
}

dependencies {
    // Core
    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.lifecycle.runtime.ktx)
    implementation(libs.androidx.lifecycle.process)
    implementation(libs.androidx.lifecycle.viewmodel.compose)
    implementation(libs.androidx.activity.compose)

    // Compose
    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.navigation.compose)
    implementation(libs.androidx.compose.foundation)

    // Crypto
    implementation(libs.bouncycastle)
    implementation(libs.tink.android)
    implementation(libs.androidx.security.crypto)

    // Serialization + Coroutines
    implementation(libs.kotlinx.serialization.json)
    implementation(libs.kotlinx.coroutines.android)

    // Nearby Connections (local P2P mesh)
    implementation(libs.play.services.nearby)

    // Biometric authentication (App Lock)
    implementation(libs.androidx.biometric)

    // QR code generation
    implementation(libs.zxing.core)

    // Embedded Tor (Guardian Project — no Orbot required)
    implementation(libs.tor.android)

    // WorkManager — periodic watchdog to revive foreground service on aggressive OEM ROMs
    implementation(libs.androidx.work.runtime.ktx)

    debugImplementation(libs.androidx.ui.tooling)
}