[versions] # Core # Updating the sdk version requires updating the version used in the build container. # See Bump SDK or container image template in Linear for more details. compile-sdk-major = "37" compile-sdk-minor = "0" build-tools = "37.0.0" min-sdk = "28" target-sdk = "37" jvm-toolchain = "21" ndk = "27.3.13750724" # The android-gradle-aapt plugin version must be in sync with the android gradle plugin version. # Required for Gradle metadata verification to work properly, see: # https://github.com/gradle/gradle/issues/19228 # Find the relevant AAPT version here: # https://mvnrepository.com/artifact/com.android.tools.build/aapt2 # or here: # https://maven.google.com/web/index.html#com.android.tools.build:aapt2 android-gradle-aapt = "15978811" android-gradle-plugin = "9.4.1" # Other android-billingclient = "9.1.0" androidx-activitycompose = "1.13.0" androidx-appcompat = "1.8.0" androidx-core = "1.19.1" androidx-coresplashscreen = "1.2.0" androidx-credentials = "1.6.0" androidx-datastore = "1.3.0" androidx-espresso = "3.7.0" androidx-lifecycle = "2.11.0" androidx-nav3 = "1.2.0" androidx-adaptive = "1.3.0" androidx-test = "1.7.0" androidx-testmonitor = "1.8.0" androidx-testorchestrator = "1.6.1" androidx-testrunner = "1.7.0" androidx-tv = "1.1.0" androidx-uiautomator = "2.4.0" androidx-work = "2.12.0" arrow = "2.2.3" baselineprofile = "1.5.0" benchmark-macro-junit4 = "1.5.0" commonsvalidator = "1.11.0" compose = "1.12.1" compose-constraintlayout = "1.1.2" compose-material-icons-extended = "1.7.8" compose-material3 = "1.4.0" cyclonedx-bom = "3.5.1" dependency-versions = "0.66.0" detekt = "2.0.0-alpha.6" accompanist = "0.37.3" # Only used to override the vulnerable version (2.22.2) used by the CycloneDX plugin. # Remove explicit jackson version once it has been fixed upstream. jackson = "2.22.3" junit = "5.14.4" junit4 = "1.3.0" junit5-android = "2.0.2" junit5-android-plugin = "2.0.2" kermit = "2.2.0" koin = "4.2.2" koin-compose = "4.2.2" konsist = "0.18.1" kotlin = "2.4.21" kotlin-ksp = "2.3.12" kotlinx = "1.11.0" kotlinx-serialization-json = "1.12.0" ktfmt = "0.27.0" ktor = "3.6.0" leakcanary = "2.14" mockk = "1.14.11" okhttp = "5.5.1" play-publisher = "4.1.1" play-services-location = "21.4.0" profileinstaller = "1.4.1" protobuf = "4.36.2" protobuf-gradle-plugin = "0.10.0" turbine = "1.2.1" annotation-jvm = "1.11.0" junit-version = "4.13.2" material = "1.14.0" rust-android = "0.11.0" wire = "7.1.0" [libraries] accompanist-drawablepainter = { module = "com.google.accompanist:accompanist-drawablepainter", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } android-billingclient = { module = "com.android.billingclient:billing-ktx", version.ref = "android-billingclient" } android-gradle-aapt = { module = "com.android.tools.build:aapt2" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activitycompose" } androidx-animation = { group = "androidx.compose.animation", name = "animation", version.ref = "compose" } androidx-annotation-jvm = { group = "androidx.annotation", name = "annotation-jvm", version.ref = "annotation-jvm" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } androidx-adaptive-layout = { module = "androidx.compose.material3.adaptive:adaptive-layout", version.ref = "androidx-adaptive" } androidx-benchmark-macro-junit4 = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "benchmark-macro-junit4" } androidx-core = { module = "androidx.core:core", version.ref = "androidx-core" } androidx-coresplashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-coresplashscreen" } androidx-credentials = { module = "androidx.credentials:credentials", version.ref = "androidx-credentials" } androidx-datastore = { module = "androidx.datastore:datastore", version.ref = "androidx-datastore" } androidx-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-espresso" } # Required for build-logic convention plugins to apply AGP and Kotlin Gradle Plugin android-gradle-junit5 = { module = "de.mannodermaus.gradle.plugins:android-junit5", version.ref = "junit5-android-plugin" } android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "android-gradle-plugin" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junit4" } androidx-lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" } androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-service = { module = "androidx.lifecycle:lifecycle-service", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel-navigation3 = { module = "androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "androidx-lifecycle" } androidx-navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", version.ref = "androidx-nav3" } androidx-navigation3-ui = { module = "androidx.navigation3:navigation3-ui", version.ref = "androidx-nav3" } androidx-profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "profileinstaller" } androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test" } androidx-test-monitor = { module = "androidx.test:monitor", version.ref = "androidx-testmonitor" } androidx-test-orchestrator = { module = "androidx.test:orchestrator", version.ref = "androidx-testorchestrator" } androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidx-test" } androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidx-testrunner" } androidx-test-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version.ref = "androidx-uiautomator" } androidx-tv = { module = "androidx.tv:tv-material", version.ref = "androidx-tv" } androidx-ui-test = { module = "androidx.compose.ui:ui-test", version.ref = "compose" } androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work" } arrow = { module = "io.arrow-kt:arrow-core", version.ref = "arrow" } arrow-optics = { module = "io.arrow-kt:arrow-optics", version.ref = "arrow" } arrow-optics-ksp = { module = "io.arrow-kt:arrow-optics-ksp-plugin", version.ref = "arrow" } arrow-resilience = { module = "io.arrow-kt:arrow-resilience", version.ref = "arrow" } commons-validator = { module = "commons-validator:commons-validator", version.ref = "commonsvalidator" } compose-constrainlayout = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "compose-constraintlayout" } compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" } compose-icons-extended = { module = "androidx.compose.material:material-icons-extended", version.ref = "compose-material-icons-extended" } compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "compose-material3" } compose-material3-windowsizeclass = { module = "androidx.compose.material3:material3-window-size-class", version.ref = "compose-material3" } compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" } compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "compose" } compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } compose-ui-tooling-android-preview = { module = "androidx.compose.ui:ui-tooling-preview-android", version.ref = "compose" } compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } compose-ui-util = { module = "androidx.compose.ui:ui-util", version.ref = "compose" } cyclonedx-gradle-plugin = { module = "org.cyclonedx:cyclonedx-gradle-plugin", version.ref = "cyclonedx-bom" } detekt-api = { module = "dev.detekt:detekt-api", version.ref = "detekt" } detekt-test = { module = "dev.detekt:detekt-test", version.ref = "detekt" } detekt-gradle-plugin = { module = "dev.detekt:detekt-gradle-plugin", version.ref = "detekt" } jackson-bom = { module = "com.fasterxml.jackson:jackson-bom", version.ref = "jackson" } junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" } junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" } junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version = "junit" } junit5-android-test-compose = { module = "de.mannodermaus.junit5:android-test-compose", version.ref = "junit5-android" } junit5-android-test-core = { module = "de.mannodermaus.junit5:android-test-core", version.ref = "junit5-android" } junit5-android-test-extensions = { module = "de.mannodermaus.junit5:android-test-extensions", version.ref = "junit5-android" } junit5-android-test-runner = { module = "de.mannodermaus.junit5:android-test-runner", version.ref = "junit5-android" } kermit = { module = "co.touchlab:kermit", version.ref = "kermit" } koin = { module = "io.insert-koin:koin-core", version.ref = "koin" } koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } koin-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koin-compose" } koin-test = { module = "io.insert-koin:koin-test", version.ref = "koin" } konsist = { module = "com.lemonappdev:konsist", version.ref = "konsist" } # Required for build-logic convention plugins to apply AGP and Kotlin Gradle Plugin kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-native-prebuilt = { module = "org.jetbrains.kotlin:kotlin-native-prebuilt", version.ref = "kotlin" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" } ktor-client-auth = { module = "io.ktor:ktor-client-auth", version.ref = "ktor" } ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" } ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" } ktor-client-resources = { module = "io.ktor:ktor-client-resources", version.ref = "ktor" } ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" } ktor-server-engine-netty = { module = "io.ktor:ktor-server-netty", version.ref = "ktor" } leakCanary = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" } mockk = { module = "io.mockk:mockk", version.ref = "mockk" } mockk-android = { module = "io.mockk:mockk-android", version.ref = "mockk" } play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "play-services-location" } protobuf-kotlin-lite = { module = "com.google.protobuf:protobuf-kotlin-lite", version.ref = "protobuf" } turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" } junit = { group = "junit", name = "junit", version.ref = "junit-version" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } okhttp-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" } wire-runtime = { group = "com.squareup.wire", name = "wire-runtime", version.ref = "wire" } wire-grpc = { group = "com.squareup.wire", name = "wire-grpc-client", version.ref = "wire" } [plugins] android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" } android-gradle-plugin = { id = "com.android.tools.build:gradle", version.ref = "android-gradle-plugin" } android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" } android-test = { id = "com.android.test", version.ref = "android-gradle-plugin" } baselineprofile = { id = "androidx.baselineprofile", version.ref = "baselineprofile" } compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } dependency-versions = { id = "io.github.ben-manes.versions", version.ref = "dependency-versions" } detekt = { id = "dev.detekt", version.ref = "detekt" } junit5-android = { id = "de.mannodermaus.android-junit5", version.ref = "junit5-android-plugin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "kotlin-ksp" } kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ktfmt = { id = "com.ncorti.ktfmt.gradle", version.ref = "ktfmt" } play-publisher = { id = "com.github.triplet.play", version.ref = "play-publisher" } # noinspection SimilarGradleDependency protobuf-core = { id = "com.google.protobuf", version.ref = "protobuf-gradle-plugin" } # noinspection SimilarGradleDependency protobuf-protoc = { id = "com.google.protobuf:protoc", version.ref = "protobuf" } rust-android = { id = "net.mullvad.rust-android", version.ref = "rust-android" } # Convention plugins mullvad-android-library = { id = "mullvad.android-library" } mullvad-android-library-feature-api = { id = "mullvad.android-library-feature-api" } mullvad-android-library-feature-impl = { id = "mullvad.android-library-feature-impl" } mullvad-android-library-compose = { id = "mullvad.android-library-compose" } mullvad-android-library-unit-test = { id = "mullvad.android-library-unit-test" } mullvad-android-library-instrumented-test = { id = "mullvad.android-library-instrumented-test" } mullvad-kotlin-toolchain = { id = "mullvad.kotlin-toolchain" } mullvad-utilities = { id = "mullvad.utilities" } mullvad-unit-test = { id = "mullvad.unit-test" } wire = { id = "com.squareup.wire", version.ref = "wire" } wire-proto-patcher = { id = "mullvad.wire-proto-patcher" }