tutanota/app-android/app/build.gradle
jenkins build server c5ee61ee78 v315.251204.0
2025-12-04 14:37:55 +01:00

179 lines
No EOL
5.8 KiB
Groovy

plugins {
id 'com.android.application'
id 'kotlin-android'
id 'org.jetbrains.kotlin.plugin.serialization' version '2.2.20'
id 'com.google.devtools.ksp'
}
group = "de.tutao"
android {
defaultConfig {
compileSdk 36
applicationId "de.tutao.tutanota"
minSdkVersion 26
targetSdkVersion 35
versionCode 396570
versionName "315.251204.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// https://issuetracker.google.com/issues/181593646
ksp {
arg("room.schemaLocation", "$projectDir/schemas".toString())
arg("room.generateKotlin", "true")
}
}
signingConfigs {
release {
// Provide non-empty placeholders because otherwise configuration will braek even in debug.
// for local dev builds, you can use the keystore that's deployed automatically to dev systems.
storeFile file(System.getenv("APK_SIGN_STORE") ?: 'MISSING_APK_STORE_ENV_VAR')
storePassword System.getenv("APK_SIGN_STORE_PASS" ?: 'MISSING_APK_SIGN_STORE_PASS_ENV_VAR')
keyAlias System.getenv("APK_SIGN_ALIAS" ?: 'MISSING_APK_SIGN_ALIAS_ENV_VAR')
keyPassword System.getenv("APK_SIGN_KEY_PASS" ?: 'MISSING_APK_SIGN_KEY_PASS_ENV_VAR')
enableV1Signing = true
enableV2Signing = true
}
}
flavorDimensions = ['releaseType']
productFlavors {
tutao {
signingConfig signingConfigs.release
}
fdroid {
}
}
buildTypes {
debug {
resValue("string", "package_name", "de.tutao.tutanota.debug")
resValue("string", "account_type", "de.tutao.tutanota.debug")
manifestPlaceholders = [contentProviderAuthority: 'de.tutao.fileprovider.debug']
applicationIdSuffix ".debug"
jniDebuggable true
}
release {
minifyEnabled true
resValue("string", "package_name", "de.tutao.tutanota")
resValue("string", "account_type", "de.tutao.tutanota")
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [contentProviderAuthority: 'de.tutao.fileprovider']
}
releaseTest {
initWith release
minifyEnabled true
resValue("string", "package_name", "de.tutao.tutanota.test")
resValue("string", "account_type", "de.tutao.tutanota.test")
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [contentProviderAuthority: 'de.tutao.fileprovider.test']
applicationIdSuffix ".test"
}
}
buildFeatures {
buildConfig = true
}
applicationVariants.configureEach { variant ->
variant.outputs.configureEach { output ->
def flavor = variant.productFlavors[0].name
outputFileName = "tutanota-app-$flavor-${variant.buildType.name}-${variant.versionName}.apk"
}
}
buildTypes.each {
it.buildConfigField 'String', 'FILE_PROVIDER_AUTHORITY', '"' + it.manifestPlaceholders['contentProviderAuthority'] + '"'
// keep in sync with src/native/main/NativePushServiceApp.ts
it.buildConfigField 'String', "SYS_MODEL_VERSION", '"126"'
it.buildConfigField 'String', "TUTANOTA_MODEL_VERSION", '"86"'
it.buildConfigField 'String', 'RES_ADDRESS', '"tutanota"'
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
packagingOptions {
resources {
excludes += ['META-INF/LICENSE', 'META-INF/ASL2.0']
}
}
lint {
disable 'MissingTranslation'
}
namespace 'de.tutao.tutanota'
ndkVersion '28.2.13676358'
}
tasks.withType(Test).configureEach {
testLogging {
exceptionFormat "full"
events "started", "skipped", "passed", "failed"
showStandardStreams true
}
}
dependencies {
def room_version = '2.6.1'
def lifecycle_version = '2.8.3'
def activity_version = '1.9.0'
def coroutines_version = '1.8.1'
implementation "de.tutao:tutasdk"
implementation project(':tutashared')
implementation 'commons-io:commons-io:2.20.0'
implementation 'androidx.core:core-ktx:1.17.0'
implementation "androidx.activity:activity-ktx:$activity_version"
implementation "androidx.browser:browser:1.9.0"
implementation "androidx.biometric:biometric:1.1.0"
implementation "androidx.core:core-splashscreen:1.0.1"
implementation "androidx.datastore:datastore-preferences:1.1.7"
implementation "androidx.room:room-ktx:$room_version"
ksp "androidx.room:room-compiler:$room_version"
implementation(files("../libs/sqlcipher-android.aar"))
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.9.4'
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
// TLS1.3 backwards compatibility for Android < 10
implementation 'org.conscrypt:conscrypt-android:2.5.3'
implementation 'com.squareup.okhttp3:okhttp:5.1.0'
implementation 'net.java.dev.jna:jna:5.18.0@aar'
testImplementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testImplementation 'androidx.test.ext:junit-ktx:1.3.0'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.robolectric:robolectric:4.16'
testImplementation 'org.mockito.kotlin:mockito-kotlin:6.0.0'
// JVM-based unit tests (that don't need a real device or emulator)
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito-inline-extended:2.28.6") {
exclude group: 'org.mockito', module: 'mockito-core'
}
androidTestImplementation "org.mockito:mockito-core:5.20.0"
androidTestImplementation "org.mockito.kotlin:mockito-kotlin:6.0.0"
androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0'
androidTestImplementation 'androidx.test:runner:1.7.0'
androidTestImplementation 'androidx.test.ext:junit-ktx:1.3.0'
androidTestImplementation 'androidx.test:rules:1.7.0'
androidTestImplementation 'com.fasterxml.jackson.core:jackson-databind:2.20.0'
androidTestImplementation 'androidx.room:room-testing:2.8.0'
}