Skip to content

Commit 7fb2b0f

Browse files
committed
Migrate build configuration to Gradle Version Catalogs
- Create `gradle/libs.versions.toml` containing all project versions, libraries, and plugins. - Refactor `build.gradle.kts` files across the project (`app`, `baselineprofile`, `hificore`, etc.) to use `libs` type-safe accessors. - Replace hardcoded dependency strings and version variables with catalog aliases. - Update plugin declarations to use the `alias()` syntax.
1 parent a06440c commit 7fb2b0f

7 files changed

Lines changed: 164 additions & 78 deletions

File tree

app/build.gradle.kts

Lines changed: 42 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
55
import org.jetbrains.kotlin.util.removeSuffixIfPresent
66
import java.util.Properties
77

8-
val aboutLibsVersion = "13.1.0" // keep in sync with plugin version
9-
val kotlinVersion = "2.3.0"
10-
118
plugins {
12-
id("com.android.application")
13-
id("com.android.built-in-kotlin")
14-
id("androidx.baselineprofile")
15-
kotlin("plugin.parcelize")
16-
kotlin("plugin.compose")
17-
id("com.mikepenz.aboutlibraries.plugin")
18-
id("com.mikepenz.aboutlibraries.plugin.android")
19-
id("pt.jcosta.resourceplaceholders")
9+
alias(libs.plugins.android.application)
10+
alias(libs.plugins.android.builtin.kotlin)
11+
alias(libs.plugins.baselineprofile)
12+
alias(libs.plugins.kotlin.parcelize)
13+
alias(libs.plugins.kotlin.compose)
14+
alias(libs.plugins.aboutlibraries)
15+
alias(libs.plugins.aboutlibraries.android)
16+
alias(libs.plugins.resourceplaceholders)
2017
}
2118

2219
android {
@@ -272,48 +269,46 @@ aboutLibraries {
272269
dependencies {
273270
implementation(project(":hificore"))
274271
implementation(project(":misc:alacdecoder"))
275-
val composeBom = platform("androidx.compose:compose-bom:2025.05.00")
276-
implementation(composeBom)
277-
androidTestImplementation(composeBom)
278-
implementation("androidx.compose.material:material-icons-extended")
279-
implementation("androidx.compose.material3:material3")
280-
implementation("androidx.compose.material3.adaptive:adaptive")
281-
implementation("androidx.compose.ui:ui-tooling-preview")
282-
debugImplementation("androidx.compose.ui:ui-tooling")
283-
implementation("androidx.activity:activity-compose:1.11.0")
284-
implementation("androidx.appcompat:appcompat:1.7.1")
285-
implementation("androidx.collection:collection-ktx:1.5.0")
286-
implementation("androidx.concurrent:concurrent-futures-ktx:1.3.0")
287-
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
288-
implementation("androidx.core:core-ktx:1.17.0")
289-
implementation("androidx.core:core-splashscreen:1.2.0")
290-
implementation("androidx.fragment:fragment-ktx:1.8.9")
291-
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.4")
292-
implementation("androidx.mediarouter:mediarouter:1.8.1")
293-
val media3Version = "1.9.1"
294-
implementation("androidx.media3:media3-common-ktx:$media3Version")
295-
implementation("androidx.media3:media3-exoplayer:$media3Version")
296-
implementation("androidx.media3:media3-exoplayer-midi:$media3Version")
297-
implementation("androidx.media3:media3-session:$media3Version")
272+
implementation(platform(libs.androidx.compose.bom))
273+
androidTestImplementation(platform(libs.androidx.compose.bom))
274+
implementation(libs.androidx.compose.material.icons.extended)
275+
implementation(libs.androidx.compose.material3)
276+
implementation(libs.androidx.compose.material3.adaptive)
277+
implementation(libs.androidx.compose.ui.tooling.preview)
278+
debugImplementation(libs.androidx.compose.ui.tooling)
279+
implementation(libs.androidx.activity.compose)
280+
implementation(libs.androidx.appcompat)
281+
implementation(libs.androidx.collection.ktx)
282+
implementation(libs.androidx.concurrent.futures.ktx)
283+
implementation(libs.androidx.constraintlayout)
284+
implementation(libs.androidx.core.ktx)
285+
implementation(libs.androidx.core.splashscreen)
286+
implementation(libs.androidx.fragment.ktx)
287+
implementation(libs.androidx.lifecycle.viewmodel.compose)
288+
implementation(libs.androidx.mediarouter)
289+
implementation(libs.androidx.media3.common.ktx)
290+
implementation(libs.androidx.media3.exoplayer)
291+
implementation(libs.androidx.media3.exoplayer.midi)
292+
implementation(libs.androidx.media3.session)
298293
//implementation("androidx.paging:paging-runtime-ktx:3.2.1") TODO paged, partial, flow based library loading
299294
//implementation("androidx.paging:paging-guava:3.2.1") TODO do we have guava? do we need this?
300-
implementation("androidx.preference:preference-ktx:1.2.1")
301-
implementation("androidx.transition:transition-ktx:1.6.0") // <-- for predictive back TODO can we remove explicit dep now?
302-
implementation("com.mikepenz:aboutlibraries-compose-m3:$aboutLibsVersion")
303-
implementation("com.google.android.material:material:1.13.0")
304-
implementation("me.zhanghai.android.fastscroll:library:1.3.0")
305-
implementation("io.coil-kt.coil3:coil-compose:3.3.0")
306-
implementation("org.lsposed.hiddenapibypass:hiddenapibypass:6.1")
295+
implementation(libs.androidx.preference.ktx)
296+
implementation(libs.androidx.transition.ktx) // <-- for predictive back TODO can we remove explicit dep now?
297+
implementation(libs.aboutlibraries.compose.m3)
298+
implementation(libs.material)
299+
implementation(libs.fastscroll)
300+
implementation(libs.coil.compose)
301+
implementation(libs.hiddenapibypass)
307302
//noinspection GradleDependency newer versions need java.nio which is api 26+
308303
//implementation("com.github.albfernandez:juniversalchardet:2.0.3") TODO
309-
implementation("androidx.profileinstaller:profileinstaller:1.4.1")
304+
implementation(libs.androidx.profileinstaller)
310305
"baselineProfile"(project(":baselineprofile"))
311306
// --- below does not apply to release builds ---
312-
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14")
313-
testImplementation("junit:junit:4.13.2")
314-
testImplementation("org.robolectric:robolectric:4.16.1")
315-
"userdebugImplementation"(kotlin("reflect", kotlinVersion)) // who thought String.invoke() is a good idea?????
316-
debugImplementation(kotlin("reflect", kotlinVersion))
307+
debugImplementation(libs.leakcanary.android)
308+
testImplementation(libs.junit)
309+
testImplementation(libs.robolectric)
310+
"userdebugImplementation"(libs.kotlin.reflect) // who thought String.invoke() is a good idea?????
311+
debugImplementation(libs.kotlin.reflect)
317312
}
318313

319314
fun String.runCommand(

baselineprofile/build.gradle.kts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import com.android.build.api.dsl.ManagedVirtualDevice
44
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
55

66
plugins {
7-
id("com.android.test")
8-
id("com.android.built-in-kotlin")
9-
id("androidx.baselineprofile")
7+
alias(libs.plugins.android.test)
8+
alias(libs.plugins.android.builtin.kotlin)
9+
alias(libs.plugins.baselineprofile)
1010
}
1111

1212
android {
@@ -58,10 +58,10 @@ baselineProfile {
5858
}
5959

6060
dependencies {
61-
implementation("androidx.test.ext:junit:1.3.0")
62-
implementation("androidx.test.espresso:espresso-core:3.7.0")
63-
implementation("androidx.test.uiautomator:uiautomator:2.3.0")
64-
implementation("androidx.benchmark:benchmark-macro-junit4:1.4.1")
61+
implementation(libs.androidx.test.ext.junit)
62+
implementation(libs.androidx.test.espresso.core)
63+
implementation(libs.androidx.test.uiautomator)
64+
implementation(libs.androidx.benchmark.macro.junit4)
6565
}
6666

6767
androidComponents {

build.gradle.kts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
// Top-level build file where you can add configuration options common to all sub-projects/modules.
22
plugins {
3-
val agpVersion = "9.0.1"
4-
id("com.android.application") version agpVersion apply false
5-
id("com.android.built-in-kotlin") version agpVersion apply false
6-
id("com.android.library") version agpVersion apply false
7-
id("com.android.test") version agpVersion apply false
8-
id("androidx.baselineprofile") version "1.5.0-alpha03" apply false
9-
val kotlinVersion = "2.3.0"
10-
kotlin("android") version kotlinVersion apply false
11-
kotlin("plugin.parcelize") version kotlinVersion apply false
12-
kotlin("plugin.compose") version kotlinVersion apply false
13-
val aboutLibsVersion = "14.0.0-b02"
14-
id("com.mikepenz.aboutlibraries.plugin") version aboutLibsVersion apply false
15-
id("com.mikepenz.aboutlibraries.plugin.android") version aboutLibsVersion apply false
16-
id("com.osacky.doctor") version "0.12.1"
17-
id("pt.jcosta.resourceplaceholders") version "0.11.2" apply false
3+
alias(libs.plugins.android.application) apply false
4+
alias(libs.plugins.android.builtin.kotlin) apply false
5+
alias(libs.plugins.android.library) apply false
6+
alias(libs.plugins.android.test) apply false
7+
alias(libs.plugins.baselineprofile) apply false
8+
alias(libs.plugins.kotlin.android) apply false
9+
alias(libs.plugins.kotlin.parcelize) apply false
10+
alias(libs.plugins.kotlin.compose) apply false
11+
alias(libs.plugins.aboutlibraries) apply false
12+
alias(libs.plugins.aboutlibraries.android) apply false
13+
alias(libs.plugins.doctor)
14+
alias(libs.plugins.resourceplaceholders) apply false
1815
}
1916

2017
doctor {

gradle/libs.versions.toml

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
[versions]
2+
agp = "9.0.1"
3+
kotlin = "2.3.0"
4+
baselineprofile = "1.5.0-alpha03"
5+
aboutlibraries = "13.1.0"
6+
aboutlibraries-plugin = "14.0.0-b02"
7+
doctor = "0.12.1"
8+
resourceplaceholders = "0.11.2"
9+
10+
compose-bom = "2025.05.00"
11+
activity-compose = "1.11.0"
12+
appcompat = "1.7.1"
13+
collection-ktx = "1.5.0"
14+
concurrent-futures-ktx = "1.3.0"
15+
constraintlayout = "2.2.1"
16+
core-ktx = "1.17.0"
17+
core-splashscreen = "1.2.0"
18+
fragment-ktx = "1.8.9"
19+
lifecycle = "2.9.4"
20+
mediarouter = "1.8.1"
21+
media3 = "1.9.1"
22+
preference-ktx = "1.2.1"
23+
transition-ktx = "1.6.0"
24+
material = "1.13.0"
25+
fastscroll = "1.3.0"
26+
coil = "3.3.0"
27+
hiddenapibypass = "6.1"
28+
profileinstaller = "1.4.1"
29+
leakcanary = "2.14"
30+
junit = "4.13.2"
31+
robolectric = "4.16.1"
32+
dlfunc = "0.1.6"
33+
androidx-test-ext-junit = "1.3.0"
34+
espresso-core = "3.7.0"
35+
uiautomator = "2.3.0"
36+
benchmark-macro-junit4 = "1.4.1"
37+
annotation = "1.9.1"
38+
39+
[libraries]
40+
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activity-compose" }
41+
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
42+
androidx-collection-ktx = { group = "androidx.collection", name = "collection-ktx", version.ref = "collection-ktx" }
43+
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" }
44+
androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" }
45+
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
46+
androidx-compose-material3-adaptive = { group = "androidx.compose.material3.adaptive", name = "adaptive" }
47+
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
48+
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
49+
androidx-concurrent-futures-ktx = { group = "androidx.concurrent", name = "concurrent-futures-ktx", version.ref = "concurrent-futures-ktx" }
50+
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
51+
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" }
52+
androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "core-splashscreen" }
53+
androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragment-ktx" }
54+
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" }
55+
androidx-media3-common = { group = "androidx.media3", name = "media3-common", version.ref = "media3" }
56+
androidx-media3-common-ktx = { group = "androidx.media3", name = "media3-common-ktx", version.ref = "media3" }
57+
androidx-media3-exoplayer = { group = "androidx.media3", name = "media3-exoplayer", version.ref = "media3" }
58+
androidx-media3-exoplayer-midi = { group = "androidx.media3", name = "media3-exoplayer-midi", version.ref = "media3" }
59+
androidx-media3-session = { group = "androidx.media3", name = "media3-session", version.ref = "media3" }
60+
androidx-mediarouter = { group = "androidx.mediarouter", name = "mediarouter", version.ref = "mediarouter" }
61+
androidx-preference-ktx = { group = "androidx.preference", name = "preference-ktx", version.ref = "preference-ktx" }
62+
androidx-profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "profileinstaller" }
63+
androidx-transition-ktx = { group = "androidx.transition", name = "transition-ktx", version.ref = "transition-ktx" }
64+
androidx-annotation = { group = "androidx.annotation", name = "annotation", version.ref = "annotation" }
65+
66+
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" }
67+
androidx-test-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso-core" }
68+
androidx-test-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" }
69+
androidx-benchmark-macro-junit4 = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "benchmark-macro-junit4" }
70+
71+
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
72+
coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref = "coil" }
73+
aboutlibraries-compose-m3 = { group = "com.mikepenz", name = "aboutlibraries-compose-m3", version.ref = "aboutlibraries" }
74+
fastscroll = { group = "me.zhanghai.android.fastscroll", name = "library", version.ref = "fastscroll" }
75+
hiddenapibypass = { group = "org.lsposed.hiddenapibypass", name = "hiddenapibypass", version.ref = "hiddenapibypass" }
76+
leakcanary-android = { group = "com.squareup.leakcanary", name = "leakcanary-android", version.ref = "leakcanary" }
77+
junit = { group = "junit", name = "junit", version.ref = "junit" }
78+
robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" }
79+
dlfunc = { group = "io.github.nift4.dlfunc", name = "dlfunc", version.ref = "dlfunc" }
80+
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
81+
82+
[plugins]
83+
android-application = { id = "com.android.application", version.ref = "agp" }
84+
android-library = { id = "com.android.library", version.ref = "agp" }
85+
android-test = { id = "com.android.test", version.ref = "agp" }
86+
android-builtin-kotlin = { id = "com.android.built-in-kotlin", version.ref = "agp" }
87+
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
88+
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
89+
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
90+
baselineprofile = { id = "androidx.baselineprofile", version.ref = "baselineprofile" }
91+
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries-plugin" }
92+
aboutlibraries-android = { id = "com.mikepenz.aboutlibraries.plugin.android", version.ref = "aboutlibraries-plugin" }
93+
doctor = { id = "com.osacky.doctor", version.ref = "doctor" }
94+
resourceplaceholders = { id = "pt.jcosta.resourceplaceholders", version.ref = "resourceplaceholders" }

hificore/build.gradle.kts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
22

33
plugins {
4-
id("com.android.library")
5-
id("com.android.built-in-kotlin")
4+
alias(libs.plugins.android.library)
5+
alias(libs.plugins.android.builtin.kotlin)
66
}
77

88
android {
@@ -59,9 +59,9 @@ kotlin {
5959
}
6060

6161
dependencies {
62-
implementation("androidx.core:core-ktx:1.17.0")
63-
implementation("androidx.media3:media3-common:1.9.0")
64-
implementation("io.github.nift4.dlfunc:dlfunc:0.1.6")
62+
implementation(libs.androidx.core.ktx)
63+
implementation(libs.androidx.media3.common)
64+
implementation(libs.dlfunc)
6565
implementation(project(":misc:audiofxfwd"))
6666
// stub project that provides hidden SDK classes, which themselves depend on public SDK
6767
compileOnly(project(":misc:audiofxstub2"))

misc/alacdecoder/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id("com.android.library")
2+
alias(libs.plugins.android.library)
33
}
44

55
android {
@@ -34,6 +34,6 @@ android {
3434
}
3535

3636
dependencies {
37-
implementation("androidx.annotation:annotation:1.9.1")
38-
implementation("androidx.media3:media3-exoplayer")
37+
implementation(libs.androidx.annotation)
38+
implementation(libs.androidx.media3.exoplayer)
3939
}

misc/audiofxstub2/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id("com.android.library")
2+
alias(libs.plugins.android.library)
33
}
44

55
android {

0 commit comments

Comments
 (0)