/* * This file is part of GNU Taler * (C) 2020 Taler Systems S.A. * * GNU Taler is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation; either version 3, or (at your option) any later version. * * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * GNU Taler; see the file COPYING. If not, see */ plugins { id "com.android.application" id "kotlin-android" id "kotlinx-serialization" } def qtart_version = "0.10.6" static def versionCodeEpoch() { return (new Date().getTime() / 1000).toInteger() } def gitCommit = { -> def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'rev-parse', '--short=7', 'HEAD' standardOutput = stdout } return stdout.toString().trim() } android { namespace 'net.taler.wallet' compileSdk 34 defaultConfig { applicationId "net.taler.wallet" minSdkVersion 24 targetSdkVersion 33 versionCode 41 versionName "0.10.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { minifyEnabled minify_debug proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } flavorDimensions = ["distributionChannel"] productFlavors { fdroid { dimension "distributionChannel" applicationIdSuffix ".fdroid" // version codes get multiplied by 10 and an ABI suffix gets added to the code // if 'splitApk' property is set } google { dimension "distributionChannel" } nightly { dimension "distributionChannel" applicationIdSuffix ".nightly" versionCode versionCodeEpoch() versionNameSuffix " ($gitCommit)" } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 // Flag to enable support for the new language APIs for zxing coreLibraryDesugaringEnabled true } kotlinOptions { jvmTarget = "17" } composeOptions { kotlinCompilerExtensionVersion "1.5.7" } buildFeatures { buildConfig true viewBinding true compose true } packagingOptions { jniLibs { keepDebugSymbols += ['**/*.so'] } resources { excludes += ['META-INF/*.kotlin_module'] } } splits { abi { // can not be defined per flavor, so we use a property to turn this on for F-Droid enable project.hasProperty('splitApk') reset() // Resets the list of ABIs to remove all included by default include "armeabi-v7a", "arm64-v8a", "x86", "x86_64" universalApk false } } lint { abortOnError true ignoreWarnings false } } dependencies { implementation project(":taler-kotlin-android") implementation "net.taler:qtart:$qtart_version@aar" implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" implementation 'androidx.preference:preference-ktx:1.2.1' implementation "com.google.android.material:material:$material_version" implementation "androidx.constraintlayout:constraintlayout:$constraintlayout_version" implementation "androidx.browser:browser:1.7.0" // Compose implementation platform('androidx.compose:compose-bom:2023.10.01') implementation 'androidx.compose.material3:material3' implementation 'androidx.compose.material:material-icons-extended' implementation "androidx.compose.runtime:runtime-livedata" implementation "androidx.lifecycle:lifecycle-viewmodel-compose" implementation "com.google.accompanist:accompanist-themeadapter-material3:0.28.0" implementation 'androidx.activity:activity-compose:1.8.2' implementation 'androidx.compose.ui:ui-tooling-preview' debugImplementation 'androidx.compose.ui:ui-tooling' // Lists and Selection implementation "androidx.recyclerview:recyclerview:1.3.2" implementation "androidx.recyclerview:recyclerview-selection:1.1.0" // Navigation Library implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" // ViewModel and LiveData implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // QR codes implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar' // needed to support zxing library in taler-kotlin-android on API < 24 coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' // Nicer ProgressBar implementation 'me.zhanghai.android.materialprogressbar:library:1.6.1' // Markdown rendering final def markwon_version = '4.6.2' implementation "io.noties.markwon:core:$markwon_version" implementation "io.noties.markwon:ext-tables:$markwon_version" implementation "io.noties.markwon:recycler:$markwon_version" // Java Native access for qtart implementation "net.java.dev.jna:jna:5.13.0@aar" testImplementation "junit:junit:$junit_version" testImplementation 'org.json:json:20220320' } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn" } } // Map for the version code that gives each ABI a value. ext.abiCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, x86: 3, x86_64: 4] // For each APK output variant, override versionCode with a combination of ext.abiCodes + variant.versionCode. android.applicationVariants.configureEach { variant -> // Assigns a different version code for each output APK variant.outputs.each { output -> // Stores the value of ext.abiCodes that is associated with the ABI for this variant. def baseAbiVersionCode = // Determines the ABI for this variant and returns the mapped value. project.ext.abiCodes.get(output.getFilter(com.android.build.OutputFile.ABI)) if (baseAbiVersionCode != null) { output.versionCodeOverride = 10 * variant.versionCode + baseAbiVersionCode } // leaves version code alone of there's no baseAbiVersionCode } }