From d33ada370f53ba5e940028c003b05560a58be9fb Mon Sep 17 00:00:00 2001 From: Steffen Winter Date: Sun, 10 May 2026 12:04:17 +0200 Subject: [PATCH] Gradle: Migrate to version catalog --- GBDaoGenerator/build.gradle | 2 +- app/build.gradle | 109 +++++++++++++--------------- gradle/libs.versions.toml | 140 ++++++++++++++++++++++++++++++++++++ 3 files changed, 191 insertions(+), 60 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/GBDaoGenerator/build.gradle b/GBDaoGenerator/build.gradle index 6d081e67a0..aae3733ccf 100644 --- a/GBDaoGenerator/build.gradle +++ b/GBDaoGenerator/build.gradle @@ -11,7 +11,7 @@ dependencies { //implementation 'com.github.Freeyourgadget:greendao:1998d7cd2d21f662c6044f6ccf3b3a251bbad341' // As of 2025-06-19, this is bundled directly in the repository due to jitpack build issues - implementation 'org.freemarker:freemarker:2.3.23' + implementation libs.freemarker } sourceSets { diff --git a/app/build.gradle b/app/build.gradle index 832be1e4a0..14eb3f6eea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -231,69 +231,60 @@ android { } dependencies { - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' + coreLibraryDesugaring libs.desugar.jdk.libs - implementation 'androidx.constraintlayout:constraintlayout:2.2.1' - implementation "androidx.camera:camera-core:1.6.1" - implementation "androidx.camera:camera-camera2:1.6.1" - implementation 'androidx.camera:camera-view:1.6.1' - implementation 'androidx.camera:camera-lifecycle:1.6.1' + implementation libs.androidx.constraintlayout + implementation libs.bundles.androidx.camera - testImplementation "junit:junit:4.13.2" - testImplementation "org.mockito:mockito-core:5.23.0" - testImplementation "org.robolectric:robolectric:4.16.1" - testImplementation "org.hamcrest:hamcrest-library:3.0" + testImplementation libs.junit + testImplementation libs.mockito + testImplementation libs.robolectric + testImplementation libs.hamcrest - implementation 'androidx.core:core-ktx:1.18.0' - implementation "org.jetbrains.kotlin:kotlin-stdlib:2.3.20" + implementation libs.androidx.core.ktx + implementation platform(libs.kotlin.bom) + implementation libs.kotlin.stdlib - implementation "androidx.appcompat:appcompat:1.7.1" - implementation "androidx.preference:preference-ktx:1.2.1" - implementation "androidx.cardview:cardview:1.0.0" - implementation "androidx.recyclerview:recyclerview:1.4.0" - implementation "androidx.legacy:legacy-support-v4:1.0.0" - implementation "androidx.gridlayout:gridlayout:1.1.0" - implementation "androidx.palette:palette-ktx:1.0.0" - implementation "androidx.activity:activity-ktx:1.13.0" - implementation "androidx.fragment:fragment-ktx:1.8.9" - implementation "androidx.viewpager2:viewpager2:1.1.0" - implementation "androidx.work:work-runtime-ktx:2.11.1" - implementation 'androidx.lifecycle:lifecycle-process:2.10.0' + implementation libs.androidx.appcompat + implementation libs.androidx.preference.ktx + implementation libs.androidx.cardview + implementation libs.androidx.recyclerview + implementation libs.androidx.legacy.support.v4 + implementation libs.androidx.gridlayout + implementation libs.androidx.palette.ktx + implementation libs.androidx.activity.ktx + implementation libs.androidx.fragment.ktx + implementation libs.androidx.viewpager2 + implementation libs.androidx.work.runtime.ktx + implementation libs.androidx.lifecycle.process - // Not latest version because of https://github.com/material-components/material-components-android/issues/3924 - implementation "com.google.android.material:material:1.13.0" - implementation 'com.google.android.flexbox:flexbox:3.0.0' - implementation "com.google.code.gson:gson:2.14.0" + implementation libs.material + implementation libs.flexbox + implementation libs.gson - implementation "no.nordicsemi.android:dfu:2.11.0" - implementation "com.github.tony19:logback-android:3.0.0" - implementation "org.slf4j:slf4j-api:2.0.17" - implementation "com.github.PhilJay:MPAndroidChart:3.1.0" - implementation "com.github.pfichtner:durationformatter:0.1.1" - implementation "de.cketti.library.changelog:ckchangelog:1.2.2" - implementation "net.e175.klaus:solarpositioning:0.1.10" - implementation "co.nstant.in:cbor:0.9" + implementation libs.dfu + implementation libs.logback.android + implementation libs.slf4j.api + implementation libs.mpandroidchart + implementation libs.durationformatter + implementation libs.ckchangelog + implementation libs.solarpositioning + implementation libs.cbor // use pristine greendao instead of our custom version, since our custom jitpack-packaged // version contains way too much and our custom patches are in the generator only. - implementation "org.greenrobot:greendao:2.2.1" - implementation "org.apache.commons:commons-lang3:3.20.0" - implementation "org.cyanogenmod:platform.sdk:6.0" - implementation 'com.jaredrummler:colorpicker:1.1.0' - implementation 'com.github.wax911.android-emojify:contract:1.9.7' - implementation 'com.github.wax911.android-emojify:emojify:1.9.7' - implementation 'com.github.wax911.android-emojify:gson:1.9.7' - implementation 'com.google.protobuf:protobuf-javalite:4.34.1' - implementation 'com.squareup.okhttp3:okhttp:5.3.2' - implementation 'org.msgpack:msgpack-core:0.9.11' - implementation 'com.github.ByteHamster:SearchPreference:2.7.3' + implementation libs.greendao + implementation libs.apache.commons.lang3 + implementation libs.cyanogenmod.sdk + implementation libs.colorpicker + implementation libs.bundles.android.emojify + implementation libs.protobuf.lite + implementation libs.okhttp + implementation libs.msgpack + implementation libs.searchpreference - implementation 'com.github.mapsforge.mapsforge:mapsforge-core:0.28.0' - implementation 'com.github.mapsforge.mapsforge:mapsforge-map:0.28.0' - implementation 'com.github.mapsforge.mapsforge:mapsforge-map-reader:0.28.0' - implementation 'com.github.mapsforge.mapsforge:mapsforge-themes:0.28.0' - implementation 'com.github.mapsforge.mapsforge:mapsforge-map-android:0.28.0' - implementation 'com.caverock:androidsvg:1.4' - implementation 'org.jsoup:jsoup:1.22.2' + implementation libs.bundles.mapsforge + implementation libs.androidsvg + implementation libs.jsoup // Bouncy Castle is included directly in GB, to avoid pulling the entire dependency // It's included in the org.bouncycastle.shaded package, to fix conflicts with roboelectric @@ -301,14 +292,14 @@ dependencies { //implementation 'org.bouncycastle:bcprov-jdk18on:1.76' // Android SDK bundles org.json, but we need an actual implementation to replace the stubs in tests - testImplementation 'org.json:json:20251224' + testImplementation libs.json // Needed for Armenian transliteration - implementation 'org.ahocorasick:ahocorasick:0.6.3' + implementation libs.ahocorasick // Android Health Connect - implementation 'com.google.guava:guava:33.4.8-android' // This is needed because CameraActivity.java line 41 doesn't have a ListenableFuture package - implementation 'androidx.health.connect:connect-client:1.1.0' + implementation libs.guava // This is needed because CameraActivity.java line 41 doesn't have a ListenableFuture package + implementation libs.androidx.health.connect.client } preBuild.dependsOn(":GBDaoGenerator:genSources") @@ -330,7 +321,7 @@ tasks.clean.dependsOn(tasks.cleanGenerated) protobuf { protoc { - artifact = 'com.google.protobuf:protoc:4.34.1' + artifact = libs.protoc.get() } generateProtoTasks { all().each { final task -> diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000000..bdda29eb48 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,140 @@ +[versions] +ahocorasick = "0.6.3" +android-emojify = "1.9.7" +android-gradle-plugin = "8.13.2" +androidsvg = "1.4" +androidx-activity = "1.13.0" +androidx-appcompat = "1.7.1" +androidx-camera = "1.6.1" +androidx-cardview = "1.0.0" +androidx-constraintlayout = "2.2.1" +androidx-core = "1.18.0" +androidx-fragment = "1.8.9" +androidx-gridlayout = "1.1.0" +androidx-health-connect = "1.1.0" +androidx-legacy = "1.0.0" +androidx-lifecycle = "2.10.0" +androidx-palette = "1.0.0" +androidx-preference = "1.2.1" +androidx-recyclerview = "1.4.0" +androidx-viewpager = "1.1.0" +androidx-workmanager = "2.11.1" +apache-commons = "3.20.0" +cbor = "0.9" +ckchangelog = "1.2.2" +colorpicker = "1.1.0" +cyanogenmod = "6.0" +desugar-jdk-libs = "2.1.5" +dfu = "2.11.0" +durationformatter = "0.1.1" +flexbox = "3.0.0" +freemarker = "2.3.23" +greendao = "2.2.1" +gson = "2.14.0" +guava = "33.4.8-android" +hamcrest = "3.0" +json = "20251224" +jsoup = "1.22.2" +junit = "4.13.2" +kotlin = "2.3.20" +logback-android = "3.0.0" +mapsforge = "0.28.0" +material = "1.13.0" +mockito = "5.23.0" +mpandroidchart = "3.1.0" +msgpack = "0.9.11" +okhttp = "5.3.2" +protobuf = "4.34.1" +protobuf-plugin = "0.10.0" +robolectric = "4.16.1" +searchpreference = "2.7.3" +slf4j = "2.0.17" +solarpositioning = "0.1.10" + +[libraries] +ahocorasick = { group = "org.ahocorasick", name = "ahocorasick", version.ref = "ahocorasick" } +android-emojify-contract = { group = "com.github.wax911.android-emojify", name = "contract", version.ref = "android-emojify" } +android-emojify-emojify = { group = "com.github.wax911.android-emojify", name = "emojify", version.ref = "android-emojify" } +android-emojify-gson = { group = "com.github.wax911.android-emojify", name = "gson", version.ref = "android-emojify" } +androidsvg = { group = "com.caverock", name = "androidsvg", version.ref = "androidsvg" } +androidx-activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "androidx-activity" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidx-appcompat" } +androidx-camera-camera2 = { group = "androidx.camera", name = "camera-camera2", version.ref = "androidx-camera" } +androidx-camera-core = { group = "androidx.camera", name = "camera-core", version.ref = "androidx-camera" } +androidx-camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "androidx-camera" } +androidx-camera-view = { group = "androidx.camera", name = "camera-view", version.ref = "androidx-camera" } +androidx-cardview = { group = "androidx.cardview", name = "cardview", version.ref = "androidx-cardview" } +androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" } +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" } +androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "androidx-fragment" } +androidx-gridlayout = { group = "androidx.gridlayout", name = "gridlayout", version.ref = "androidx-gridlayout" } +androidx-health-connect-client = { group = "androidx.health.connect", name = "connect-client", version.ref = "androidx-health-connect" } +androidx-legacy-support-v4 = { group = "androidx.legacy", name = "legacy-support-v4", version.ref = "androidx-legacy" } +androidx-lifecycle-process = { group = "androidx.lifecycle", name = "lifecycle-process", version.ref = "androidx-lifecycle" } +androidx-palette-ktx = { group = "androidx.palette", name = "palette-ktx", version.ref = "androidx-palette" } +androidx-preference-ktx = { group = "androidx.preference", name = "preference-ktx", version.ref = "androidx-preference" } +androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "androidx-recyclerview" } +androidx-viewpager2 = { group = "androidx.viewpager2", name = "viewpager2", version.ref = "androidx-viewpager" } +androidx-work-runtime-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "androidx-workmanager" } +apache-commons-lang3 = { group = "org.apache.commons", name = "commons-lang3", version.ref = "apache-commons" } +cbor = { group = "co.nstant.in", name = "cbor", version.ref = "cbor" } +ckchangelog = { group = "de.cketti.library.changelog", name = "ckchangelog", version.ref = "ckchangelog" } +colorpicker = { group = "com.jaredrummler", name = "colorpicker", version.ref = "colorpicker" } +cyanogenmod-sdk = { group = "org.cyanogenmod", name = "platform.sdk", version.ref = "cyanogenmod" } +desugar-jdk-libs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar-jdk-libs" } +dfu = { group = "no.nordicsemi.android", name = "dfu", version.ref = "dfu" } +durationformatter = { group = "com.github.pfichtner", name = "durationformatter", version.ref = "durationformatter" } +flexbox = { group = "com.google.android.flexbox", name = "flexbox", version.ref = "flexbox" } +freemarker = { group = "org.freemarker", name = "freemarker", version.ref = "freemarker" } +greendao = { group = "org.greenrobot", name = "greendao", version.ref = "greendao" } +gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" } +guava = { group = "com.google.guava", name = "guava", version.ref = "guava" } +hamcrest = { group = "org.hamcrest", name = "hamcrest-library", version.ref = "hamcrest" } +json = { group = "org.json", name = "json", version.ref = "json" } +jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoup" } +junit = { group = "junit", name = "junit", version.ref = "junit" } +kotlin-bom = { group = "org.jetbrains.kotlin", name = "kotlin-bom", version.ref = "kotlin" } +kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib" } +logback-android = { group = "com.github.tony19", name = "logback-android", version.ref = "logback-android" } +mapsforge-core = { group = "com.github.mapsforge.mapsforge", name = "mapsforge-core", version.ref = "mapsforge" } +mapsforge-map = { group = "com.github.mapsforge.mapsforge", name = "mapsforge-map", version.ref = "mapsforge" } +mapsforge-map-android = { group = "com.github.mapsforge.mapsforge", name = "mapsforge-map-android", version.ref = "mapsforge" } +mapsforge-map-reader = { group = "com.github.mapsforge.mapsforge", name = "mapsforge-map-reader", version.ref = "mapsforge" } +mapsforge-themes = { group = "com.github.mapsforge.mapsforge", name = "mapsforge-themes", version.ref = "mapsforge" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } +mockito = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" } +mpandroidchart = { group = "com.github.PhilJay", name = "MPAndroidChart", version.ref = "mpandroidchart" } +msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" } +okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } +protobuf-lite = { group = "com.google.protobuf", name = "protobuf-javalite", version.ref = "protobuf" } +protoc = { group = "com.google.protobuf", name = "protoc", version.ref = "protobuf" } +robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" } +searchpreference = { group = "com.github.ByteHamster", name = "SearchPreference", version.ref = "searchpreference" } +slf4j-api = { group = "org.slf4j", name = "slf4j-api", version.ref = "slf4j" } +solarpositioning = { group = "net.e175.klaus", name = "solarpositioning", version.ref = "solarpositioning" } + +[bundles] +android-emojify = [ + "android-emojify-contract", + "android-emojify-emojify", + "android-emojify-gson", +] +androidx-camera = [ + "androidx-camera-camera2", + "androidx-camera-core", + "androidx-camera-lifecycle", + "androidx-camera-view", +] +mapsforge = [ + "mapsforge-core", + "mapsforge-map", + "mapsforge-map-android", + "mapsforge-map-reader", + "mapsforge-themes", +] + +[plugins] +android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } +protobuf = { id = "com.google.protobuf", version.ref = "protobuf-plugin" }