diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a3fbc47e3f..0bef66f90d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,6 +17,6 @@ jobs: fetch-depth: 0 - uses: actions/setup-java@v1 with: - java-version: 17 + java-version: 21 - name: Build and Test run: bash ./gradlew clean test --stacktrace diff --git a/README.md b/README.md index f3b813ffe8..82c1a06265 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Cryptomator for Android is currently available in the following distribution ch ### Dependencies * Git -* JDK 17 +* JDK 21 * Gradle ### Run Git and Gradle diff --git a/build.gradle b/build.gradle index ea6ea50216..01e3b19024 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { // before upgrading AGP, check https://gitlab.com/fdroid/admin/-/issues/593 - classpath 'com.android.tools.build:gradle:8.13.2' + classpath 'com.android.tools.build:gradle:9.4.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.1.1" } @@ -16,17 +16,13 @@ buildscript { def getVersionCode = { -> try { - def branchName = new ByteArrayOutputStream() - exec { + def branchName = providers.exec { commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD' - standardOutput = branchName - } - def appBuild = new ByteArrayOutputStream() - exec { - commandLine 'git', 'rev-list', '--count', branchName.toString().trim() - standardOutput = appBuild - } - return Integer.parseInt(appBuild.toString().trim()) + 1958 // adding 1958 for legacy reasons + }.standardOutput.asText.get().trim() + def appBuild = providers.exec { + commandLine 'git', 'rev-list', '--count', branchName + }.standardOutput.asText.get().trim() + return Integer.parseInt(appBuild) + 1958 // adding 1958 for legacy reasons } catch (ignored) { return -1 @@ -49,7 +45,7 @@ allprojects { } task clean(type: Delete) { - delete rootProject.buildDir + delete rootProject.layout.buildDirectory } def getApiKey(key) { diff --git a/buildsystem/Dockerfile b/buildsystem/Dockerfile index 8d82ba35f8..2c5574b735 100644 --- a/buildsystem/Dockerfile +++ b/buildsystem/Dockerfile @@ -20,8 +20,8 @@ RUN apt-get update -y && apt-get install -y $(cat docker/dependencies.txt) RUN docker/print-versions.sh docker/dependencies.txt ENV ANDROID_COMMAND_LINE_TOOLS_FILENAME commandlinetools-linux-10406996_latest.zip -ENV ANDROID_API_LEVELS android-36 -ENV ANDROID_BUILD_TOOLS_VERSION 36.1.0 +ENV ANDROID_API_LEVELS android-37 +ENV ANDROID_BUILD_TOOLS_VERSION 37.0.0 ENV ANDROID_HOME /usr/local/android-sdk-linux ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/cmdline-tools/bin @@ -35,7 +35,7 @@ RUN yes | sdkmanager --update --sdk_root="${ANDROID_HOME}" RUN yes | sdkmanager --sdk_root="${ANDROID_HOME}" "platforms;${ANDROID_API_LEVELS}" "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" RUN yes | sdkmanager --licenses --sdk_root="${ANDROID_HOME}" -RUN update-java-alternatives -s java-1.17.0-openjdk-amd64 +RUN update-java-alternatives -s java-1.21.0-openjdk-amd64 RUN rm -rf ${ANDROID_HOME}/tools diff --git a/buildsystem/dependencies.gradle b/buildsystem/dependencies.gradle index 6a1b374c6a..c06de3d62c 100644 --- a/buildsystem/dependencies.gradle +++ b/buildsystem/dependencies.gradle @@ -37,14 +37,13 @@ allprojects { } ext { - androidBuildToolsVersion = "36.1.0" + androidBuildToolsVersion = "37.0.0" androidMinSdkVersion = 26 - androidTargetSdkVersion = 36 - androidCompileSdkVersion = 36 + androidTargetSdkVersion = 37 + androidCompileSdkVersion = 37 // android and java libs androidVersion = '4.1.1.4' - multidexVersion = '2.0.1' javaxAnnotationVersion = '1.0' // support lib @@ -109,6 +108,7 @@ ext { // testing dependencies jUnitVersion = '5.11.4' + jUnitPlatformVersion = '1.11.4' // keep in sync with jUnitVersion assertJVersion = '1.7.1' mockitoVersion = '5.23.0' mockitoKotlinVersion = '6.3.0' @@ -175,6 +175,7 @@ ext { junitApi : "org.junit.jupiter:junit-jupiter-api:${jUnitVersion}", junitEngine : "org.junit.jupiter:junit-jupiter-engine:${jUnitVersion}", junitParams : "org.junit.jupiter:junit-jupiter-params:${jUnitVersion}", + junitPlatformLauncher : "org.junit.platform:junit-platform-launcher:${jUnitPlatformVersion}", junit4Engine : "org.junit.vintage:junit-vintage-engine:${jUnitVersion}", minIo : "io.minio:minio:${minIoVersion}", mockito : "org.mockito:mockito-core:${mockitoVersion}", @@ -183,7 +184,6 @@ ext { mockitoAndroid : "org.mockito:mockito-android:${mockitoAndroidVersion}", msgraph : "com.microsoft.graph:microsoft-graph:${msgraphVersion}", msgraphAuth : "com.microsoft.identity.client:msal:${msgraphAuthVersion}", - multidex : "androidx.multidex:multidex:${multidexVersion}", okHttp : "com.squareup.okhttp3:okhttp:${okHttpVersion}", okHttpDigest : "io.github.rburgst:okhttp-digest:${okHttpDigestVersion}", pcloud : "com.github.cryptomator.pcloud-sdk-java:java-core:${pcloudVersion}", diff --git a/buildsystem/docker/dependencies.txt b/buildsystem/docker/dependencies.txt index a35cdad6fd..8241f297fb 100644 --- a/buildsystem/docker/dependencies.txt +++ b/buildsystem/docker/dependencies.txt @@ -2,4 +2,4 @@ apt-utils=2.9.3 wget=1.24.5-1 git=1:2.45.1-1 unzip=6.0-28 -openjdk-17-jdk=17.0.11+9-1 +openjdk-21-jdk=21.0.3+9-2 diff --git a/data/build.gradle b/data/build.gradle index a3da15e213..037ea0331c 100644 --- a/data/build.gradle +++ b/data/build.gradle @@ -25,13 +25,13 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 coreLibraryDesugaringEnabled true } - kotlinOptions { jvmTarget = JavaVersion.VERSION_17 } + kotlinOptions { jvmTarget = JavaVersion.VERSION_21 } buildFeatures { buildConfig true } @@ -213,6 +213,7 @@ dependencies { testRuntimeOnly dependencies.junitEngine testImplementation dependencies.junitParams testRuntimeOnly dependencies.junit4Engine + testRuntimeOnly dependencies.junitPlatformLauncher implementation dependencies.androidxTestJunitKtln testImplementation dependencies.mockito diff --git a/domain/build.gradle b/domain/build.gradle index 923d813be7..8f1a6fd890 100644 --- a/domain/build.gradle +++ b/domain/build.gradle @@ -19,12 +19,12 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 coreLibraryDesugaringEnabled true } - kotlinOptions { jvmTarget = JavaVersion.VERSION_17 } + kotlinOptions { jvmTarget = JavaVersion.VERSION_21 } buildFeatures { buildConfig true } @@ -96,6 +96,7 @@ dependencies { testImplementation dependencies.junitParams testRuntimeOnly dependencies.junit4Engine + testRuntimeOnly dependencies.junitPlatformLauncher testImplementation dependencies.mockito testImplementation dependencies.mockitoKotlin diff --git a/generator-api/build.gradle b/generator-api/build.gradle index 45cabb4c40..72a3249dbc 100644 --- a/generator-api/build.gradle +++ b/generator-api/build.gradle @@ -1,14 +1,16 @@ apply plugin: 'java' -//noinspection GroovyUnusedAssignment -sourceCompatibility = 17 -//noinspection GroovyUnusedAssignment -targetCompatibility = 17 +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} dependencies { def dependencies = rootProject.ext.dependencies - implementation(dependencies.android) { + // compile-only: only @Intent references android.app.Activity, and AGP 9 no longer + // auto-ignores this legacy jar, so its transitives would clash on the app runtime classpath + compileOnly(dependencies.android) { exclude module: 'httpclient' } } diff --git a/generator/build.gradle b/generator/build.gradle index 9fffdf15e6..2e63052afb 100644 --- a/generator/build.gradle +++ b/generator/build.gradle @@ -1,9 +1,9 @@ apply plugin: 'java' -//noinspection GroovyUnusedAssignment -sourceCompatibility = 17 -//noinspection GroovyUnusedAssignment -targetCompatibility = 17 +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} repositories { mavenCentral() diff --git a/generator/src/main/java/org/cryptomator/generator/ActivityProcessor.java b/generator/src/main/java/org/cryptomator/generator/ActivityProcessor.java index 7c99c56b67..08cb9a3b88 100644 --- a/generator/src/main/java/org/cryptomator/generator/ActivityProcessor.java +++ b/generator/src/main/java/org/cryptomator/generator/ActivityProcessor.java @@ -18,7 +18,7 @@ import javax.tools.JavaFileObject; @SupportedAnnotationTypes("org.cryptomator.generator.Activity") -@SupportedSourceVersion(SourceVersion.RELEASE_17) +@SupportedSourceVersion(SourceVersion.RELEASE_21) public class ActivityProcessor extends BaseProcessor { @Override diff --git a/generator/src/main/java/org/cryptomator/generator/CallbackProcessor.java b/generator/src/main/java/org/cryptomator/generator/CallbackProcessor.java index 09b692a48b..a6c937998f 100644 --- a/generator/src/main/java/org/cryptomator/generator/CallbackProcessor.java +++ b/generator/src/main/java/org/cryptomator/generator/CallbackProcessor.java @@ -22,7 +22,7 @@ import javax.tools.JavaFileObject; @SupportedAnnotationTypes("org.cryptomator.generator.Callback") -@SupportedSourceVersion(SourceVersion.RELEASE_17) +@SupportedSourceVersion(SourceVersion.RELEASE_21) public class CallbackProcessor extends BaseProcessor { @Override diff --git a/generator/src/main/java/org/cryptomator/generator/FragmentProcessor.java b/generator/src/main/java/org/cryptomator/generator/FragmentProcessor.java index 8ab84be615..93b5e5db6b 100644 --- a/generator/src/main/java/org/cryptomator/generator/FragmentProcessor.java +++ b/generator/src/main/java/org/cryptomator/generator/FragmentProcessor.java @@ -18,7 +18,7 @@ import javax.tools.JavaFileObject; @SupportedAnnotationTypes("org.cryptomator.generator.Fragment") -@SupportedSourceVersion(SourceVersion.RELEASE_17) +@SupportedSourceVersion(SourceVersion.RELEASE_21) public class FragmentProcessor extends BaseProcessor { @Override diff --git a/generator/src/main/java/org/cryptomator/generator/InstanceStateProcessor.java b/generator/src/main/java/org/cryptomator/generator/InstanceStateProcessor.java index 86b55b4464..109609e35d 100644 --- a/generator/src/main/java/org/cryptomator/generator/InstanceStateProcessor.java +++ b/generator/src/main/java/org/cryptomator/generator/InstanceStateProcessor.java @@ -19,7 +19,7 @@ import javax.tools.JavaFileObject; @SupportedAnnotationTypes("org.cryptomator.generator.InstanceState") -@SupportedSourceVersion(SourceVersion.RELEASE_17) +@SupportedSourceVersion(SourceVersion.RELEASE_21) public class InstanceStateProcessor extends BaseProcessor { @Override diff --git a/generator/src/main/java/org/cryptomator/generator/IntentProcessor.java b/generator/src/main/java/org/cryptomator/generator/IntentProcessor.java index 28d31a2907..d34c0c684d 100644 --- a/generator/src/main/java/org/cryptomator/generator/IntentProcessor.java +++ b/generator/src/main/java/org/cryptomator/generator/IntentProcessor.java @@ -22,7 +22,7 @@ import javax.tools.JavaFileObject; @SupportedAnnotationTypes("org.cryptomator.generator.Intent") -@SupportedSourceVersion(SourceVersion.RELEASE_17) +@SupportedSourceVersion(SourceVersion.RELEASE_21) public class IntentProcessor extends BaseProcessor { @Override diff --git a/generator/src/main/java/org/cryptomator/generator/UseCaseProcessor.java b/generator/src/main/java/org/cryptomator/generator/UseCaseProcessor.java index 9d2321fbd3..7fbd32cbe9 100644 --- a/generator/src/main/java/org/cryptomator/generator/UseCaseProcessor.java +++ b/generator/src/main/java/org/cryptomator/generator/UseCaseProcessor.java @@ -15,7 +15,7 @@ import javax.tools.JavaFileObject; @SupportedAnnotationTypes("org.cryptomator.generator.UseCase") -@SupportedSourceVersion(SourceVersion.RELEASE_17) +@SupportedSourceVersion(SourceVersion.RELEASE_21) public class UseCaseProcessor extends BaseProcessor { @Override diff --git a/gradle.properties b/gradle.properties index 5db8c731d8..b4f0a9ec90 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,13 @@ android.useAndroidX=true android.enableJetifier=true android.jetifier.ignorelist=jackson-core,fastdoubleparser kapt.incremental.apt=false -android.defaults.buildfeatures.buildconfig=true android.nonTransitiveRClass=false android.nonFinalResIds=false +# AGP 9 provides Kotlin support itself and disables the legacy variant API; both are +# still needed while this project applies the standalone 'kotlin-android' plugin, +# which calls applicationVariants/libraryVariants. see https://kotl.in/gradle/agp-built-in-kotlin +android.builtInKotlin=false +android.newDsl=false +# the generator annotations take R.layout constants (e.g. @BottomSheet(R.layout.x)), which +# the app compile-time R class does not provide: 'element value must be a constant expression' +android.enableAppCompileTimeRClass=false diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55baa..b1b8ef56b4 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aaaabb3cb9..65d8749eab 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,10 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip +distributionSha256Sum=bbaeb2fef8710818cf0e261201dab964c572f92b942812df0c3620d62a529a01 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 23d15a9367..249efbb032 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee845..8508ef684d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,12 +19,12 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -51,7 +51,7 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -65,30 +65,18 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line -set CLASSPATH= -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/presentation/build.gradle b/presentation/build.gradle index 62bf1ae20f..8ac3d7f3c4 100644 --- a/presentation/build.gradle +++ b/presentation/build.gradle @@ -33,21 +33,21 @@ android { versionCode globalConfiguration["androidVersionCode"] versionName globalConfiguration["androidVersionName"] - multiDexEnabled true testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 coreLibraryDesugaringEnabled true } - kotlinOptions { jvmTarget = JavaVersion.VERSION_17 } + kotlinOptions { jvmTarget = JavaVersion.VERSION_21 } buildFeatures { viewBinding true buildConfig true + resValues true } defaultConfig.manifestPlaceholders = [ @@ -242,9 +242,6 @@ dependencies { playstoreiapImplementation dependencies.billing - // multidex - implementation dependencies.multidex - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" // test @@ -284,6 +281,7 @@ dependencies { testRuntimeOnly dependencies.junitEngine testImplementation dependencies.junitParams testRuntimeOnly dependencies.junit4Engine + testRuntimeOnly dependencies.junitPlatformLauncher testImplementation dependencies.mockito testImplementation dependencies.mockitoKotlin diff --git a/presentation/src/main/java/org/cryptomator/presentation/CryptomatorApp.kt b/presentation/src/main/java/org/cryptomator/presentation/CryptomatorApp.kt index 40f1a9f1da..c412cbd237 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/CryptomatorApp.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/CryptomatorApp.kt @@ -1,6 +1,7 @@ package org.cryptomator.presentation import android.app.Activity +import android.app.Application import android.content.ComponentName import android.content.Context import android.content.Intent @@ -9,7 +10,6 @@ import android.os.Build import android.os.IBinder import android.os.StrictMode import androidx.appcompat.app.AppCompatDelegate -import androidx.multidex.MultiDexApplication import org.cryptomator.data.cloud.crypto.Cryptors import org.cryptomator.data.cloud.crypto.CryptorsModule import org.cryptomator.data.repository.RepositoryModule @@ -38,7 +38,7 @@ import java.util.concurrent.atomic.AtomicInteger import io.reactivex.plugins.RxJavaPlugins import timber.log.Timber -class CryptomatorApp : MultiDexApplication(), HasComponent { +class CryptomatorApp : Application(), HasComponent { private val appCryptors = Cryptors.Delegating() private lateinit var applicationComponent: ApplicationComponent diff --git a/settings.gradle b/settings.gradle index 326464e57f..821dcc67d3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,6 @@ +// pins the Kotlin module name, which is used to mangle internal members, so it no longer depends on the +// name of the checkout directory; 'project' matches the Docker mount path in buildsystem/Dockerfile, so +// APKs already published from there stay reproducible. see https://github.com/cryptomator/android/issues/645 +rootProject.name = 'project' + include ':generator', ':presentation', ':generator-api', ':domain', ':data', ':util' diff --git a/util/build.gradle b/util/build.gradle index b6102adfe2..278aab13f0 100644 --- a/util/build.gradle +++ b/util/build.gradle @@ -19,10 +19,10 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 + sourceCompatibility JavaVersion.VERSION_21 + targetCompatibility JavaVersion.VERSION_21 } - kotlinOptions { jvmTarget = JavaVersion.VERSION_17 } + kotlinOptions { jvmTarget = JavaVersion.VERSION_21 } buildFeatures { buildConfig true } @@ -104,6 +104,7 @@ dependencies { testRuntimeOnly dependencies.junitEngine testImplementation dependencies.junitParams testRuntimeOnly dependencies.junit4Engine + testRuntimeOnly dependencies.junitPlatformLauncher testImplementation dependencies.hamcrest testImplementation dependencies.mockito