import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.androidApplication) alias(libs.plugins.jetbrainsKotlinAndroid) alias(libs.plugins.googleServices) alias(libs.plugins.jetbrainsComposeCompiler) alias(libs.plugins.serialization) } def getCurrentBranch() { try { def branch = 'git rev-parse --abbrev-ref HEAD'.execute().text.trim() return branch } catch (Exception e) { println "Could not determine git branch: ${e.message}" return "unknown" } } def generateVersionName(String baseVersion) { def currentBranch = getCurrentBranch() if (currentBranch == "main" || currentBranch == "master" || currentBranch == "unknown" || currentBranch == "HEAD") { return baseVersion } else { // Clean branch name for version (replace special characters) def cleanBranch = currentBranch.replaceAll(/[^a-zA-Z0-9\-_]/, "-") // Limit branch name to maximum 20 characters if (cleanBranch.length() > 20) { cleanBranch = cleanBranch.substring(0, 20) } return "${baseVersion}-${cleanBranch}" } } android { namespace = 'com.vitorpamplona.amethyst' compileSdk = libs.versions.android.compileSdk.get().toInteger() defaultConfig { applicationId = "com.vitorpamplona.amethyst" minSdk = libs.versions.android.minSdk.get().toInteger() targetSdk = libs.versions.android.targetSdk.get().toInteger() versionCode = 428 versionName = generateVersionName("1.03.0") buildConfigField "String", "RELEASE_NOTES_ID", "\"08abe267baf5d7ce14db7975866f929e2794cc23484171aef0816c60a2416597\"" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } resourceConfigurations += [ 'ar', 'ar-rSA', 'bn-rBD', 'cs', 'cs-rCZ', 'cy-rGB', 'da-rDK', 'de', 'de-rDE', 'el-rGR', 'en-rGB', 'eo', 'eo-rUY', 'es', 'es-rES', 'es-rMX', 'es-rUS', 'et-rEE', 'fa', 'fa-rIR', 'fi-rFI', 'fo-rFO', 'fr', 'fr-rCA', 'fr-rFR', 'gu-rIN', 'hi-rIN', 'hr-rHR', 'hu', 'hu-rHU', 'in', 'in-rID', 'it-rIT', 'iw-rIL', 'ja', 'ja-rJP', 'kk-rKZ', 'ko-rKR', 'ks-rIN', 'ku-rTR', 'lt-rLT', 'ne-rNP', 'nl', 'nl-rBE', 'nl-rNL', 'pcm-rNG', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ru', 'ru-rRU', 'ru-rUA', 'sa-rIN', 'sl-rSI', 'so-rSO', 'sr-rSP', 'ss-rZA', 'sv-rSE', 'sw-rKE', 'sw-rTZ', 'ta', 'ta-rIN', 'th', 'th-rTH', 'tr', 'tr-rTR', 'uk', 'uk-rUA', 'ur-rIN', 'uz-rUZ', 'vi-rVN', 'zh', 'zh-rCN', 'zh-rHK', 'zh-rSG', 'zh-rTW' ] } buildTypes { release { proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), 'proguard-rules.pro' minifyEnabled = true } debug { applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' resValue "string", "app_name", "@string/app_name_debug" } create("benchmark") { initWith(getByName("release")) applicationIdSuffix '.benchmark' versionNameSuffix '-BENCHMARK' resValue "string", "app_name", "@string/app_name_benchmark" profileable = true signingConfig = signingConfigs.debug } } // TODO: remove this when lightcompressor uses one MP4 parser only packaging { resources { resources.pickFirsts.add('builddef.lst') resources.pickFirsts.add('META-INF/LICENSE.md') resources.pickFirsts.add('META-INF/LICENSE-notice.md') } } flavorDimensions = ["channel"] productFlavors { play { getIsDefault().set(true) dimension "channel" } fdroid { dimension "channel" } } splits { abi { enable = true reset() include "x86", "x86_64", "arm64-v8a", "armeabi-v7a" universalApk = true } } compileOptions { sourceCompatibility JavaVersion.VERSION_21 targetCompatibility JavaVersion.VERSION_21 } buildFeatures { compose = true buildConfig = true } packagingOptions { resources { excludes += ['/META-INF/{AL2.0,LGPL2.1}', '**/libscrypt.dylib'] } } lint { disable 'MissingTranslation' } testOptions { unitTests.returnDefaultValues = true } } // TODO: until google merges and unifiedpush updates https://github.com/tink-crypto/tink-java-apps/pull/5 configurations.all { def tink = "com.google.crypto.tink:tink-android:1.17.0" resolutionStrategy { force(tink) dependencySubstitution { substitute module('com.google.crypto.tink:tink') using module(tink) } } } kotlin { compilerOptions { jvmTarget = JvmTarget.JVM_21 } } composeCompiler { reportsDestination = layout.buildDirectory.dir("compose_compiler") metricsDestination = layout.buildDirectory.dir("compose_compiler") } dependencies { implementation platform(libs.androidx.compose.bom) implementation project(path: ':quartz') implementation project(path: ':commons') implementation project(path: ':ammolite') implementation libs.androidx.core.ktx implementation libs.androidx.activity.compose implementation libs.androidx.ui implementation libs.androidx.ui.graphics implementation libs.androidx.ui.tooling.preview // Needs this to open gallery / image upload implementation libs.androidx.fragment.ktx // Navigation implementation libs.androidx.navigation.compose // Material 3 Design implementation libs.androidx.material3 implementation libs.androidx.material.icons // Adaptive Layout / Two Pane implementation libs.androidx.material3.windowSize implementation libs.accompanist.adaptive // Lifecycle implementation libs.androidx.lifecycle.runtime.ktx implementation libs.androidx.lifecycle.runtime.compose implementation libs.androidx.lifecycle.viewmodel.compose // Zoomable images implementation libs.zoomable // Biometrics implementation libs.androidx.biometric.ktx // Websockets API implementation libs.okhttp implementation libs.okhttpCoroutines // Encrypted Key Storage implementation libs.androidx.security.crypto.ktx implementation libs.androidx.datastore.preferences // view videos implementation libs.androidx.media3.exoplayer implementation libs.androidx.media3.exoplayer.hls implementation libs.androidx.media3.ui implementation libs.androidx.media3.session // important for proxy / tor implementation libs.androidx.media3.datasource.okhttp // Load images from the web. implementation libs.coil.compose // view gifs implementation libs.coil.gif // view svgs implementation libs.coil.svg // enables network for coil implementation libs.coil.okhttp // Permission to upload pictures: implementation libs.accompanist.permissions // For QR generation implementation libs.zxing implementation libs.zxing.embedded // Markdown //implementation "com.halilibo.compose-richtext:richtext-ui:0.16.0" //implementation "com.halilibo.compose-richtext:richtext-ui-material:0.16.0" //implementation "com.halilibo.compose-richtext:richtext-commonmark:0.16.0" // Markdown (With fix for full-image bleeds) implementation libs.markdown.ui implementation libs.markdown.ui.material3 implementation libs.markdown.commonmark // Language picker and Theme chooser implementation libs.androidx.appcompat // Dynamically adjust between phone and tablet UI implementation libs.androidx.window.core.android // Local model for language identification playImplementation libs.google.mlkit.language.id // Google services model the translate text playImplementation libs.google.mlkit.translate // PushNotifications playImplementation platform(libs.firebase.bom) playImplementation libs.firebase.messaging //PushNotifications(FDroid) fdroidImplementation libs.unifiedpush // Charts implementation libs.vico.charts.core implementation libs.vico.charts.compose implementation libs.vico.charts.views implementation libs.vico.charts.m3 // GeoHash implementation libs.drfonfon.geohash // Waveform visualizer implementation libs.audiowaveform // Video compression lib implementation libs.abedElazizShe.video.compressor.fork // Image compression lib implementation libs.zelory.image.compressor // Cbor for cashuB format implementation libs.kotlinx.serialization.cbor // Kotlin serialization for the times where we need the Json tree and performance is not that important. implementation(libs.kotlinx.serialization.json) implementation libs.tor.android implementation libs.jtorctl testImplementation libs.junit testImplementation libs.mockk testImplementation libs.kotlinx.coroutines.test androidTestImplementation platform(libs.androidx.compose.bom) androidTestImplementation libs.androidx.junit androidTestImplementation libs.androidx.junit.ktx androidTestImplementation libs.androidx.espresso.core androidTestImplementation libs.androidx.ui.test.junit4 androidTestImplementation libs.mockk.android debugImplementation platform(libs.androidx.compose.bom) debugImplementation libs.androidx.ui.tooling debugImplementation libs.androidx.ui.test.manifest implementation libs.androidx.camera.core implementation libs.androidx.camera.camera2 implementation libs.androidx.camera.lifecycle implementation libs.androidx.camera.view implementation libs.androidx.camera.extensions }