Merge and cleanup version catalogs (#3103)

# Conflicts:
#	app/build.gradle.kts
#	core/archive/build.gradle.kts
#	gradle/libs.versions.toml
#	i18n/build.gradle.kts
#	settings.gradle.kts
#	source-api/build.gradle.kts
This commit is contained in:
AntsyLich
2026-03-20 21:15:40 +06:00
committed by Jobobby04
parent 4d46e84f54
commit 4c51d01236
22 changed files with 287 additions and 326 deletions
+45 -46
View File
@@ -177,94 +177,93 @@ dependencies {
implementation(projects.presentationWidget) implementation(projects.presentationWidget)
// Compose // Compose
implementation(compose.activity) implementation(libs.androidx.activity.compose)
implementation(compose.foundation) implementation(libs.androidx.compose.foundation)
implementation(compose.material3.core) implementation(libs.androidx.compose.material3)
implementation(compose.material.icons) implementation(libs.androidx.compose.materialIcons)
implementation(compose.animation) implementation(libs.androidx.compose.animation)
implementation(compose.animation.graphics) implementation(libs.androidx.compose.animationGraphics)
debugImplementation(compose.ui.tooling) debugImplementation(libs.androidx.compose.uiTooling)
implementation(compose.ui.tooling.preview) implementation(libs.androidx.compose.uiToolingPreview)
implementation(compose.ui.util) implementation(libs.androidx.compose.uiUtil)
implementation(androidx.interpolator) implementation(libs.androidx.interpolator)
implementation(androidx.paging.runtime) implementation(libs.androidx.paging.runtime)
implementation(androidx.paging.compose) implementation(libs.androidx.paging.compose)
implementation(androidx.sqlite.bundled) implementation(libs.androidx.sqlite.bundled)
// SY --> // SY -->
implementation(sylibs.sqlcipher) implementation(sylibs.sqlcipher)
// SY <-- // SY <--
implementation(kotlinx.reflect)
implementation(kotlinx.immutables)
implementation(platform(kotlinx.coroutines.bom)) implementation(libs.kotlin.reflect)
implementation(kotlinx.bundles.coroutines) implementation(libs.kotlinx.collections.immutable)
implementation(libs.bundles.kotlinx.coroutines)
// AndroidX libraries // AndroidX libraries
implementation(androidx.annotation) implementation(libs.androidx.annotation)
implementation(androidx.appcompat) implementation(libs.androidx.appCompat)
implementation(androidx.biometricktx) implementation(libs.androidx.biometric)
implementation(androidx.constraintlayout) implementation(libs.androidx.constraintLayout)
implementation(androidx.corektx) implementation(libs.androidx.core)
implementation(androidx.splashscreen) implementation(libs.androidx.coreSplashScreen)
implementation(androidx.recyclerview) implementation(libs.androidx.recyclerView)
implementation(androidx.viewpager) implementation(libs.androidx.viewPager)
implementation(androidx.profileinstaller) implementation(libs.androidx.profileInstaller)
implementation(androidx.bundles.lifecycle) implementation(libs.bundles.androidx.lifecycle)
// Job scheduling // Job scheduling
implementation(androidx.workmanager) implementation(libs.androidx.work)
// RxJava // RxJava
implementation(libs.rxjava) implementation(libs.rxJava)
// Networking // Networking
implementation(libs.bundles.okhttp) implementation(libs.bundles.okhttp)
implementation(libs.okio) implementation(libs.okio)
implementation(libs.conscrypt.android) // TLS 1.3 support for Android < 10 implementation(libs.conscrypt) // TLS 1.3 support for Android < 10
// Data serialization (JSON, protobuf, xml) // Data serialization (JSON, protobuf, xml)
implementation(kotlinx.bundles.serialization) implementation(libs.bundles.serialization)
// HTML parser // HTML parser
implementation(libs.jsoup) implementation(libs.jsoup)
// Disk // Disk
implementation(libs.disklrucache) implementation(libs.diskLruCache)
implementation(libs.unifile) implementation(libs.unifile)
// Preferences // Preferences
implementation(libs.preferencektx) implementation(libs.androidx.preference)
// Dependency injection // Dependency injection
implementation(libs.injekt) implementation(libs.injekt)
// Image loading // Image loading
implementation(platform(libs.coil.bom))
implementation(libs.bundles.coil) implementation(libs.bundles.coil)
implementation(libs.subsamplingscaleimageview) { implementation(libs.subsamplingScaleImageView) {
exclude(module = "image-decoder") exclude(module = "image-decoder")
} }
implementation(libs.image.decoder) implementation(libs.image.decoder)
// UI libraries // UI libraries
implementation(libs.material) implementation(libs.material)
implementation(libs.flexible.adapter.core) implementation(libs.flexibleAdapter)
implementation(libs.photoview) implementation(libs.photoView)
implementation(libs.directionalviewpager) { implementation(libs.directionalViewPager) {
exclude(group = "androidx.viewpager", module = "viewpager") exclude(group = "androidx.viewpager", module = "viewpager")
} }
implementation(libs.richeditor.compose) implementation(libs.composeRichEditor)
implementation(libs.aboutLibraries.compose) implementation(libs.aboutLibraries.compose)
implementation(libs.bundles.voyager) implementation(libs.bundles.voyager)
implementation(libs.compose.materialmotion) implementation(libs.composeMaterialMotion)
implementation(libs.swipe) implementation(libs.swipe)
implementation(libs.compose.webview) implementation(libs.composeWebview)
implementation(libs.compose.grid) implementation(libs.composeGrid)
implementation(libs.reorderable) implementation(libs.reorderable)
implementation(libs.bundles.markdown) implementation(libs.bundles.markdown)
implementation(libs.materialKolor) implementation(libs.materialKolor)
@@ -288,10 +287,10 @@ dependencies {
testRuntimeOnly(libs.junit.platform.launcher) testRuntimeOnly(libs.junit.platform.launcher)
// For detecting memory leaks; see https://square.github.io/leakcanary/ // For detecting memory leaks; see https://square.github.io/leakcanary/
// debugImplementation(libs.leakcanary.android) // debugImplementation(libs.leakCanary.android)
implementation(libs.leakcanary.plumber) implementation(libs.leakCanary.plumber)
testImplementation(kotlinx.coroutines.test) testImplementation(libs.kotlinx.coroutines.test)
// SY --> // SY -->
// Firebase (EH) // Firebase (EH)
@@ -328,6 +327,6 @@ androidComponents {
buildscript { buildscript {
dependencies { dependencies {
classpath(kotlinx.gradle) classpath(libs.kotlin.gradle)
} }
} }
+2 -2
View File
@@ -6,11 +6,11 @@ buildscript {
} }
plugins { plugins {
alias(kotlinx.plugins.serialization) apply false alias(libs.plugins.kotlin.serialization) apply false
alias(libs.plugins.aboutLibraries) apply false alias(libs.plugins.aboutLibraries) apply false
alias(libs.plugins.firebase.crashlytics) apply false alias(libs.plugins.firebase.crashlytics) apply false
alias(libs.plugins.google.services) apply false alias(libs.plugins.google.services) apply false
alias(libs.plugins.moko) apply false alias(libs.plugins.moko.resources) apply false
alias(libs.plugins.sqldelight) apply false alias(libs.plugins.sqldelight) apply false
} }
+3 -6
View File
@@ -3,16 +3,13 @@ plugins {
} }
dependencies { dependencies {
implementation(androidx.gradle) implementation(libs.android.gradle)
implementation(kotlinx.gradle) implementation(libs.kotlin.gradle)
implementation(kotlinx.compose.compiler.gradle) implementation(libs.kotlin.compose.compiler.gradle)
implementation(libs.spotless.gradle) implementation(libs.spotless.gradle)
implementation(gradleApi()) implementation(gradleApi())
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
implementation(files(androidx.javaClass.superclass.protectionDomain.codeSource.location))
implementation(files(compose.javaClass.superclass.protectionDomain.codeSource.location))
implementation(files(kotlinx.javaClass.superclass.protectionDomain.codeSource.location))
} }
repositories { repositories {
-9
View File
@@ -3,15 +3,6 @@ dependencyResolutionManagement {
create("libs") { create("libs") {
from(files("../gradle/libs.versions.toml")) from(files("../gradle/libs.versions.toml"))
} }
create("androidx") {
from(files("../gradle/androidx.versions.toml"))
}
create("compose") {
from(files("../gradle/compose.versions.toml"))
}
create("kotlinx") {
from(files("../gradle/kotlinx.versions.toml"))
}
} }
} }
@@ -22,7 +22,7 @@ spotless {
kotlin { kotlin {
target("**/*.kt", "**/*.kts") target("**/*.kt", "**/*.kts")
targetExclude("**/build/**/*.kt") targetExclude("**/build/**/*.kt")
ktlint(libs.ktlint.core.get().version) ktlint(libs.ktlint.bom.get().version)
trimTrailingWhitespace() trimTrailingWhitespace()
endWithNewline() endWithNewline()
} }
@@ -1,9 +1,6 @@
package mihon.buildlogic package mihon.buildlogic
import com.android.build.api.dsl.CommonExtension import com.android.build.api.dsl.CommonExtension
import org.gradle.accessors.dm.LibrariesForAndroidx
import org.gradle.accessors.dm.LibrariesForCompose
import org.gradle.accessors.dm.LibrariesForKotlinx
import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test import org.gradle.api.tasks.testing.Test
@@ -17,9 +14,6 @@ import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginE
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.io.File import java.io.File
val Project.androidx get() = the<LibrariesForAndroidx>()
val Project.compose get() = the<LibrariesForCompose>()
val Project.kotlinx get() = the<LibrariesForKotlinx>()
val Project.libs get() = the<LibrariesForLibs>() val Project.libs get() = the<LibrariesForLibs>()
internal fun Project.configureAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) { internal fun Project.configureAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) {
@@ -54,12 +48,12 @@ internal fun Project.configureAndroid(commonExtension: CommonExtension<*, *, *,
} }
dependencies { dependencies {
"coreLibraryDesugaring"(libs.desugar) "coreLibraryDesugaring"(libs.android.desugar)
} }
} }
internal fun Project.configureCompose(commonExtension: CommonExtension<*, *, *, *, *, *>) { internal fun Project.configureCompose(commonExtension: CommonExtension<*, *, *, *, *, *>) {
pluginManager.apply(kotlinx.plugins.compose.compiler.get().pluginId) pluginManager.apply(libs.plugins.kotlin.compose.compiler.get().pluginId)
commonExtension.apply { commonExtension.apply {
buildFeatures { buildFeatures {
@@ -67,7 +61,7 @@ internal fun Project.configureCompose(commonExtension: CommonExtension<*, *, *,
} }
dependencies { dependencies {
"implementation"(platform(compose.bom)) "implementation"(platform(libs.androidx.compose.bom))
} }
} }
+1 -1
View File
@@ -16,5 +16,5 @@ android {
dependencies { dependencies {
implementation(projects.sourceApi) implementation(projects.sourceApi)
implementation(kotlinx.bundles.serialization) implementation(libs.bundles.serialization)
} }
+8 -8
View File
@@ -26,24 +26,24 @@ dependencies {
api(libs.logcat) api(libs.logcat)
api(libs.rxjava) api(libs.rxJava)
api(libs.okhttp.core) api(libs.okhttp.core)
api(libs.okhttp.logging) api(libs.okhttp.logging)
api(libs.okhttp.brotli) api(libs.okhttp.brotli)
api(libs.okhttp.dnsoverhttps) api(libs.okhttp.dnsOverHttps)
api(libs.okio) api(libs.okio)
implementation(libs.image.decoder) implementation(libs.image.decoder)
implementation(libs.unifile) implementation(libs.unifile)
implementation(libs.libarchive) implementation(libs.archive)
api(kotlinx.coroutines.core) api(libs.kotlinx.coroutines.core)
api(kotlinx.serialization.json) api(libs.kotlinx.serialization.json)
api(kotlinx.serialization.json.okio) api(libs.kotlinx.serialization.jsonOkio)
api(libs.preferencektx) api(libs.androidx.preference)
implementation(libs.jsoup) implementation(libs.jsoup)
@@ -51,7 +51,7 @@ dependencies {
implementation(libs.natural.comparator) implementation(libs.natural.comparator)
// JavaScript engine // JavaScript engine
implementation(libs.bundles.js.engine) implementation(libs.quickJs)
testImplementation(libs.bundles.test) testImplementation(libs.bundles.test)
testRuntimeOnly(libs.junit.platform.launcher) testRuntimeOnly(libs.junit.platform.launcher)
+1 -1
View File
@@ -16,7 +16,7 @@ android {
databases { databases {
create("Database") { create("Database") {
packageName.set("tachiyomi.data") packageName.set("tachiyomi.data")
dialect(libs.sqldelight.dialects.sql) dialect(libs.sqldelight.sqliteDialect338)
schemaOutputDirectory.set(project.file("./src/main/sqldelight")) schemaOutputDirectory.set(project.file("./src/main/sqldelight"))
} }
} }
+5 -6
View File
@@ -23,21 +23,20 @@ dependencies {
implementation(projects.sourceApi) implementation(projects.sourceApi)
implementation(projects.core.common) implementation(projects.core.common)
implementation(platform(kotlinx.coroutines.bom)) implementation(libs.bundles.kotlinx.coroutines)
implementation(kotlinx.bundles.coroutines) implementation(libs.bundles.serialization)
implementation(kotlinx.bundles.serialization)
implementation(libs.unifile) implementation(libs.unifile)
api(libs.sqldelight.android.paging) api(libs.sqldelight.androidxPaging)
compileOnly(compose.runtime.annotation) compileOnly(libs.androidx.compose.runtimeAnnotation)
// SY --> // SY -->
implementation(libs.injekt) implementation(libs.injekt)
// SY <-- // SY <--
testImplementation(libs.bundles.test) testImplementation(libs.bundles.test)
testImplementation(kotlinx.coroutines.test) testImplementation(libs.kotlinx.coroutines.test)
testRuntimeOnly(libs.junit.platform.launcher) testRuntimeOnly(libs.junit.platform.launcher)
} }
-40
View File
@@ -1,40 +0,0 @@
[versions]
agp_version = "8.13.2"
lifecycle_version = "2.10.0"
paging_version = "3.4.2"
interpolator_version = "1.0.0"
sqlite = "2.6.2"
[libraries]
gradle = { module = "com.android.tools.build:gradle", version.ref = "agp_version" }
annotation = "androidx.annotation:annotation:1.9.1"
appcompat = "androidx.appcompat:appcompat:1.7.1"
biometricktx = "androidx.biometric:biometric-ktx:1.2.0-alpha05"
constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.1"
corektx = "androidx.core:core-ktx:1.18.0"
splashscreen = "androidx.core:core-splashscreen:1.2.0"
recyclerview = "androidx.recyclerview:recyclerview:1.4.0"
viewpager = "androidx.viewpager:viewpager:1.1.0"
profileinstaller = "androidx.profileinstaller:profileinstaller:1.4.1"
lifecycle-common = { module = "androidx.lifecycle:lifecycle-common", version.ref = "lifecycle_version" }
lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycle_version" }
lifecycle-runtimektx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle_version" }
workmanager = "androidx.work:work-runtime:2.11.1"
paging-runtime = { module = "androidx.paging:paging-runtime", version.ref = "paging_version" }
paging-compose = { module = "androidx.paging:paging-compose", version.ref = "paging_version" }
interpolator = { group = "androidx.interpolator", name = "interpolator", version.ref = "interpolator_version" }
benchmark-macro = "androidx.benchmark:benchmark-macro-junit4:1.4.1"
test-ext = "androidx.test.ext:junit-ktx:1.3.0"
test-espresso-core = "androidx.test.espresso:espresso-core:3.7.0"
test-uiautomator = "androidx.test.uiautomator:uiautomator:2.3.0"
sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" }
[bundles]
lifecycle = ["lifecycle-common", "lifecycle-process", "lifecycle-runtimektx"]
-19
View File
@@ -1,19 +0,0 @@
[versions]
compose-bom = "2026.03.00"
[libraries]
activity = "androidx.activity:activity-compose:1.13.0"
bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" }
foundation = { module = "androidx.compose.foundation:foundation" }
animation = { module = "androidx.compose.animation:animation" }
animation-graphics = { module = "androidx.compose.animation:animation-graphics" }
runtime = { module = "androidx.compose.runtime:runtime" }
runtime-annotation = { module = "androidx.compose.runtime:runtime-annotation" }
ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
ui-util = { module = "androidx.compose.ui:ui-util" }
material3-core = { module = "androidx.compose.material3:material3" }
material-icons = { module = "androidx.compose.material:material-icons-extended" }
glance = "androidx.glance:glance-appwidget:1.1.1"
-33
View File
@@ -1,33 +0,0 @@
[versions]
kotlin_version = "2.3.20"
serialization_version = "1.10.0"
xml_serialization_version = "0.91.3"
[libraries]
reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin_version" }
gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin_version" }
compose-compiler-gradle = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin_version" }
immutables = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version = "0.4.0" }
coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version = "1.10.2" }
coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core" }
coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android" }
coroutines-guava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava" }
coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test" }
serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization_version" }
serialization-json-okio = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-okio", version.ref = "serialization_version" }
serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "serialization_version" }
serialization-xml-core = { module = "io.github.pdvrieze.xmlutil:core-android", version.ref = "xml_serialization_version" }
serialization-xml = { module = "io.github.pdvrieze.xmlutil:serialization", version.ref = "xml_serialization_version" }
[bundles]
coroutines = ["coroutines-core", "coroutines-android", "coroutines-guava"]
serialization = ["serialization-json", "serialization-json-okio", "serialization-protobuf", "serialization-xml-core", "serialization-xml"]
[plugins]
android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin_version" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin_version" }
serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin_version" }
+188 -104
View File
@@ -1,123 +1,207 @@
[versions] [versions]
aboutlib_version = "13.2.1" aboutLibraries = "13.2.1"
leakcanary = "2.14" android-desugar = "2.1.5"
moko = "0.26.1" android-gradle = "8.13.2"
okhttp_version = "5.3.2" android-shortcut = "0.1.2"
shizuku_version = "13.1.5" androidx-activity-compose = "1.13.0"
sqldelight = "2.3.2" androidx-annotation = "1.9.1"
voyager = "1.1.0-beta03" androidx-appCompat = "1.7.1"
spotless = "8.4.0" androidx-benchmark = "1.4.1"
ktlint-core = "1.8.0" androidx-biometric = "1.2.0-alpha05"
androidx-compose-bom = "2026.03.00"
androidx-constraintLayout = "2.2.1"
androidx-core = "1.18.0"
androidx-coreSplashScreen = "1.2.0"
androidx-glance = "1.1.1"
androidx-interpolator = "1.0.0"
androidx-lifecycle = "2.10.0"
androidx-paging = "3.4.2"
androidx-preference = "1.2.1"
androidx-profileInstaller = "1.4.1"
androidx-recyclerView = "1.4.0"
androidx-sqlite = "2.6.2"
androidx-test-espresso = "3.7.0"
androidx-test-junit = "1.3.0"
androidx-test-uiautomator = "2.3.0"
androidx-viewPager = "1.1.0"
androidx-work = "2.11.1"
archive = "1.1.6"
coil = "3.4.0"
composeGrid = "1.2.2"
composeMaterialMotion = "2.0.1"
composeRichEditor = "1.0.0-rc13"
composeWebview = "0.33.6"
conscrypt = "2.5.3"
directionalViewPager = "1.0.0"
diskLruCache = "2.0.2"
firebase-bom = "34.11.0" firebase-bom = "34.11.0"
markdown = "0.39.2" firebase-crashlytics = "3.0.6"
flexibleAdapter = "c8013533"
google-services = "4.4.4"
image-decoder = "41c059e540"
injekt = "ee267b2e27"
jsoup = "1.22.1"
junit = "6.0.3" junit = "6.0.3"
kotest-assertions = "6.1.7"
kotlin-gradle = "2.3.20"
kotlinx-collections-immutable = "0.4.0"
kotlinx-coroutines = "1.10.2"
kotlinx-serialization = "1.10.0"
ktlint = "1.8.0"
leakCanary = "2.14"
logcat = "0.4"
markdown = "0.39.2"
material = "1.12.0"
materialKolor = "5.0.0-alpha07" materialKolor = "5.0.0-alpha07"
mockk = "1.14.9"
moko-resources = "0.26.1"
okhttp = "5.3.2"
okio = "3.17.0"
photoView = "2.3.0"
quickJs = "547f5b1597"
reorderable = "3.0.0"
rxJava = "1.3.8"
shizuku = "13.1.5"
spotless = "8.4.0"
sqldelight = "2.3.2"
sqldelight-androidx-driver = "0.0.17"
stringSimilarity = "0.1.0"
subsamplingScaleImageView = "66e0db195d"
swipe = "1.3.0"
unifile = "e0def6b3dc"
voyager = "1.1.0-beta03"
xmlutil = "0.91.3"
[libraries] [libraries]
desugar = "com.android.tools:desugar_jdk_libs:2.1.5" aboutLibraries-compose = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutLibraries" }
android-shortcut-gradle = "com.github.zellius:android-shortcut-gradle-plugin:0.1.2" android-desugar = { module = "com.android.tools:desugar_jdk_libs", version.ref = "android-desugar" }
android-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle" }
rxjava = "io.reactivex:rxjava:1.3.8" android-shortcut-gradle = { module = "com.github.zellius:android-shortcut-gradle-plugin", version.ref = "android-shortcut" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" }
okhttp-core = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp_version" } androidx-annotation = { module = "androidx.annotation:annotation", version.ref = "androidx-annotation" }
okhttp-logging = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp_version" } androidx-appCompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appCompat" }
okhttp-brotli = { module = "com.squareup.okhttp3:okhttp-brotli", version.ref = "okhttp_version" } androidx-benchmark-macroJunit4 = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "androidx-benchmark" }
okhttp-dnsoverhttps = { module = "com.squareup.okhttp3:okhttp-dnsoverhttps", version.ref = "okhttp_version" } androidx-biometric = { module = "androidx.biometric:biometric-ktx", version.ref = "androidx-biometric" }
okio = "com.squareup.okio:okio:3.17.0" androidx-compose-animation = { module = "androidx.compose.animation:animation" }
androidx-compose-animationGraphics = { module = "androidx.compose.animation:animation-graphics" }
conscrypt-android = "org.conscrypt:conscrypt-android:2.5.3" androidx-compose-bom = { module = "androidx.compose:compose-bom-beta", version.ref = "androidx-compose-bom" }
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation" }
quickjs-android = { group = "com.github.zhanghai.quickjs-java", name = "quickjs-android", version = "547f5b1597" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" }
androidx-compose-materialIcons = { module = "androidx.compose.material:material-icons-extended" }
jsoup = "org.jsoup:jsoup:1.22.1" androidx-compose-runtime = { module = "androidx.compose.runtime:runtime" }
androidx-compose-runtimeAnnotation = { module = "androidx.compose.runtime:runtime-annotation" }
disklrucache = "com.jakewharton:disklrucache:2.0.2" androidx-compose-uiTooling = { module = "androidx.compose.ui:ui-tooling" }
unifile = "com.github.tachiyomiorg:unifile:e0def6b3dc" androidx-compose-uiToolingPreview = { module = "androidx.compose.ui:ui-tooling-preview" }
libarchive = "me.zhanghai.android.libarchive:library:1.1.6" androidx-compose-uiUtil = { module = "androidx.compose.ui:ui-util" }
androidx-constraintLayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintLayout" }
preferencektx = "androidx.preference:preference-ktx:1.2.1" androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }
androidx-coreSplashScreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-coreSplashScreen" }
injekt = "com.github.null2264:injekt-koin:ee267b2e27" androidx-glance-appWidget = { module = "androidx.glance:glance-appwidget", version.ref = "androidx-glance" }
androidx-interpolator = { module = "androidx.interpolator:interpolator", version.ref = "androidx-interpolator" }
coil-bom = { module = "io.coil-kt.coil3:coil-bom", version = "3.4.0" } androidx-lifecycle-common = { module = "androidx.lifecycle:lifecycle-common", version.ref = "androidx-lifecycle" }
coil-core = { module = "io.coil-kt.coil3:coil" } androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "androidx-lifecycle" }
coil-gif = { module = "io.coil-kt.coil3:coil-gif" } androidx-lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
coil-compose = { module = "io.coil-kt.coil3:coil-compose" } androidx-paging-compose = { module = "androidx.paging:paging-compose", version.ref = "androidx-paging" }
coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp" } androidx-paging-runtime = { module = "androidx.paging:paging-runtime", version.ref = "androidx-paging" }
androidx-preference = { module = "androidx.preference:preference-ktx", version.ref = "androidx-preference" }
subsamplingscaleimageview = "com.github.tachiyomiorg:subsampling-scale-image-view:66e0db195d" androidx-profileInstaller = { module = "androidx.profileinstaller:profileinstaller", version.ref = "androidx-profileInstaller" }
image-decoder = "com.github.tachiyomiorg:image-decoder:41c059e540" androidx-recyclerView = { module = "androidx.recyclerview:recyclerview", version.ref = "androidx-recyclerView" }
androidx-sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "androidx-sqlite" }
natural-comparator = "com.github.gpanther:java-nat-sort:natural-comparator-1.1" androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso" }
androidx-test-junit = { module = "androidx.test.ext:junit-ktx", version.ref = "androidx-test-junit" }
richeditor-compose = "com.mohamedrejeb.richeditor:richeditor-compose:1.0.0-rc13" androidx-test-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version.ref = "androidx-test-uiautomator" }
androidx-viewPager = { module = "androidx.viewpager:viewpager", version.ref = "androidx-viewPager" }
material = "com.google.android.material:material:1.12.0" androidx-work = { module = "androidx.work:work-runtime", version.ref = "androidx-work" }
flexible-adapter-core = "com.github.arkon.FlexibleAdapter:flexible-adapter:c8013533" archive = { module = "me.zhanghai.android.libarchive:library", version.ref = "archive" }
photoview = "com.github.chrisbanes:PhotoView:2.3.0" coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
directionalviewpager = "com.github.tachiyomiorg:DirectionalViewPager:1.0.0" coil-core = { module = "io.coil-kt.coil3:coil", version.ref = "coil" }
compose-materialmotion = "io.github.fornewid:material-motion-compose-core:2.0.1" coil-gif = { module = "io.coil-kt.coil3:coil-gif", version.ref = "coil" }
compose-webview = "io.github.kevinnzou:compose-webview:0.33.6" coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }
compose-grid = "io.woong.compose.grid:grid:1.2.2" composeGrid = { module = "io.woong.compose.grid:grid", version.ref = "composeGrid" }
reorderable = { module = "sh.calvin.reorderable:reorderable", version = "3.0.0" } composeMaterialMotion = { module = "io.github.fornewid:material-motion-compose-core", version.ref = "composeMaterialMotion" }
composeRichEditor = { module = "com.mohamedrejeb.richeditor:richeditor-compose", version.ref = "composeRichEditor" }
swipe = "me.saket.swipe:swipe:1.3.0" composeWebview = { module = "io.github.kevinnzou:compose-webview", version.ref = "composeWebview" }
conscrypt = { module = "org.conscrypt:conscrypt-android", version.ref = "conscrypt" }
moko-core = { module = "dev.icerock.moko:resources", version.ref = "moko" } directionalViewPager = { module = "com.github.tachiyomiorg:DirectionalViewPager", version.ref = "directionalViewPager" }
diskLruCache = { module = "com.jakewharton:disklrucache", version.ref = "diskLruCache" }
logcat = "com.squareup.logcat:logcat:0.4"
firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" }
firebase-analytics = { module = "com.google.firebase:firebase-analytics" } firebase-analytics = { module = "com.google.firebase:firebase-analytics" }
firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase-bom" }
firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" } firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" }
flexibleAdapter = { module = "com.github.arkon.FlexibleAdapter:flexible-adapter", version.ref = "flexibleAdapter" }
aboutLibraries-compose = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlib_version" } image-decoder = { module = "com.github.tachiyomiorg:image-decoder", version.ref = "image-decoder" }
injekt = { module = "com.github.null2264:injekt-koin", version.ref = "injekt" }
shizuku-api = { module = "dev.rikka.shizuku:api", version.ref = "shizuku_version" } jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
shizuku-provider = { module = "dev.rikka.shizuku:provider", version.ref = "shizuku_version" }
leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" }
leakcanary-plumber = { module = "com.squareup.leakcanary:plumber-android", version.ref = "leakcanary" }
sqldelight-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
sqldelight-androidx-driver = { module = "com.eygraber:sqldelight-androidx-driver", version = "0.0.17" }
sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions-jvm", version.ref = "sqldelight" }
sqldelight-android-paging = { module = "app.cash.sqldelight:androidx-paging3-extensions", version.ref = "sqldelight" }
sqldelight-dialects-sql = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version.ref = "sqldelight" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" }
kotest-assertions = "io.kotest:kotest-assertions-core:6.1.7" kotest-assertions = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest-assertions" }
mockk = "io.mockk:mockk:1.14.9" kotlin-compose-compiler-gradle = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin-gradle" }
kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin-gradle" }
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin-gradle" }
voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" } kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version.ref = "kotlinx-collections-immutable" }
voyager-tab-navigator = { module = "cafe.adriel.voyager:voyager-tab-navigator", version.ref = "voyager" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" }
voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-guava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava", version.ref = "kotlinx-coroutines" }
spotless-gradle = { group = "com.diffplug.spotless", name = "spotless-plugin-gradle", version.ref = "spotless" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
ktlint-core = { module = "com.pinterest.ktlint:ktlint-cli", version.ref = "ktlint-core" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
kotlinx-serialization-jsonOkio = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-okio", version.ref = "kotlinx-serialization" }
markdown-core = { module = "com.mikepenz:multiplatform-markdown-renderer", version.ref = "markdown" } kotlinx-serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "kotlinx-serialization" }
ktlint-bom = { module = "com.pinterest.ktlint:ktlint-bom", version.ref = "ktlint" }
leakCanary-core = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakCanary" }
leakCanary-plumber = { module = "com.squareup.leakcanary:plumber-android", version.ref = "leakCanary" }
logcat = { module = "com.squareup.logcat:logcat", version.ref = "logcat" }
markdown-coil = { module = "com.mikepenz:multiplatform-markdown-renderer-coil3", version.ref = "markdown" } markdown-coil = { module = "com.mikepenz:multiplatform-markdown-renderer-coil3", version.ref = "markdown" }
markdown-core = { module = "com.mikepenz:multiplatform-markdown-renderer", version.ref = "markdown" }
stringSimilarity = { module = "com.aallam.similarity:string-similarity-kotlin", version = "0.1.0" } material = { module = "com.google.android.material:material", version.ref = "material" }
materialKolor = { module = "com.materialkolor:material-kolor", version.ref = "materialKolor" } materialKolor = { module = "com.materialkolor:material-kolor", version.ref = "materialKolor" }
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
moko-resources = { module = "dev.icerock.moko:resources", version.ref = "moko-resources" }
natural-comparator = { module = "com.github.gpanther:java-nat-sort", version = "natural-comparator-1.1" }
okhttp-brotli = { module = "com.squareup.okhttp3:okhttp-brotli", version.ref = "okhttp" }
okhttp-core = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
okhttp-dnsOverHttps = { module = "com.squareup.okhttp3:okhttp-dnsoverhttps", version.ref = "okhttp" }
okhttp-logging = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp" }
okio = { module = "com.squareup.okio:okio", version.ref = "okio" }
photoView = { module = "com.github.chrisbanes:PhotoView", version.ref = "photoView" }
quickJs = { module = "com.github.zhanghai.quickjs-java:quickjs-android", version.ref = "quickJs" }
reorderable = { module = "sh.calvin.reorderable:reorderable", version.ref = "reorderable" }
rxJava = { module = "io.reactivex:rxjava", version.ref = "rxJava" }
shizuku-api = { module = "dev.rikka.shizuku:api", version.ref = "shizuku" }
shizuku-provider = { module = "dev.rikka.shizuku:provider", version.ref = "shizuku" }
spotless-gradle = { module = "com.diffplug.spotless:spotless-plugin-gradle", version.ref = "spotless" }
sqldelight-androidDriver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
sqldelight-androidxDriver = { module = "com.eygraber:sqldelight-androidx-driver", version.ref = "sqldelight-androidx-driver" }
sqldelight-androidxPaging = { module = "app.cash.sqldelight:androidx-paging3-extensions", version.ref = "sqldelight" }
sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions-jvm", version.ref = "sqldelight" }
sqldelight-sqliteDialect338 = { module = "app.cash.sqldelight:sqlite-3-38-dialect", version.ref = "sqldelight" }
stringSimilarity = { module = "com.aallam.similarity:string-similarity-kotlin", version.ref = "stringSimilarity" }
subsamplingScaleImageView = { module = "com.github.tachiyomiorg:subsampling-scale-image-view", version.ref = "subsamplingScaleImageView" }
swipe = { module = "me.saket.swipe:swipe", version.ref = "swipe" }
unifile = { module = "com.github.tachiyomiorg:unifile", version.ref = "unifile" }
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" }
voyager-screenModel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" }
voyager-tabNavigator = { module = "cafe.adriel.voyager:voyager-tab-navigator", version.ref = "voyager" }
voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" }
xmlutil-core = { module = "io.github.pdvrieze.xmlutil:core-android", version.ref = "xmlutil" }
xmlutil-serialization = { module = "io.github.pdvrieze.xmlutil:serialization", version.ref = "xmlutil" }
[plugins] [plugins]
google-services = { id = "com.google.gms.google-services", version = "4.4.4" } aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin.android", version.ref = "aboutLibraries" }
aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin.android", version.ref = "aboutlib_version" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" }
google-services = { id = "com.google.gms.google-services", version.ref = "google-services" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin-gradle" }
kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin-gradle" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin-gradle" }
moko-resources = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko-resources" }
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
moko = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko" }
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.6" }
[bundles] [bundles]
okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsoverhttps"] androidx-lifecycle = ["androidx-lifecycle-common", "androidx-lifecycle-process", "androidx-lifecycle-runtime"]
js-engine = ["quickjs-android"]
coil = ["coil-core", "coil-gif", "coil-compose", "coil-network-okhttp"] coil = ["coil-core", "coil-gif", "coil-compose", "coil-network-okhttp"]
shizuku = ["shizuku-api", "shizuku-provider"] kotlinx-coroutines = ["kotlinx-coroutines-core", "kotlinx-coroutines-android", "kotlinx-coroutines-guava"]
sqldelight = ["sqldelight-android-driver", "sqldelight-androidx-driver", "sqldelight-coroutines", "sqldelight-android-paging"]
voyager = ["voyager-navigator", "voyager-screenmodel", "voyager-tab-navigator", "voyager-transitions"]
test = ["junit-jupiter", "kotest-assertions", "mockk"]
markdown = ["markdown-core", "markdown-coil"] markdown = ["markdown-core", "markdown-coil"]
okhttp = ["okhttp-core", "okhttp-logging", "okhttp-brotli", "okhttp-dnsOverHttps"]
serialization = ["kotlinx-serialization-json", "kotlinx-serialization-jsonOkio", "kotlinx-serialization-protobuf", "xmlutil-core", "xmlutil-serialization"]
shizuku = ["shizuku-api", "shizuku-provider"]
sqldelight = ["sqldelight-androidDriver", "sqldelight-androidxDriver", "sqldelight-coroutines", "sqldelight-androidxPaging"]
test = ["junit-jupiter", "kotest-assertions", "mockk"]
voyager = ["voyager-navigator", "voyager-screenModel", "voyager-tabNavigator", "voyager-transitions"]
+2 -2
View File
@@ -1,7 +1,7 @@
plugins { plugins {
id("mihon.library") id("mihon.library")
kotlin("multiplatform") kotlin("multiplatform")
alias(libs.plugins.moko) alias(libs.plugins.moko.resources)
id("com.github.ben-manes.versions") id("com.github.ben-manes.versions")
} }
@@ -13,7 +13,7 @@ kotlin {
sourceSets { sourceSets {
commonMain { commonMain {
dependencies { dependencies {
api(libs.moko.core) api(libs.moko.resources)
} }
} }
} }
+2 -2
View File
@@ -5,7 +5,7 @@ import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
plugins { plugins {
id("mihon.library") id("mihon.library")
kotlin("multiplatform") kotlin("multiplatform")
alias(libs.plugins.moko) alias(libs.plugins.moko.resources)
id("com.github.ben-manes.versions") id("com.github.ben-manes.versions")
} }
@@ -17,7 +17,7 @@ kotlin {
sourceSets { sourceSets {
commonMain { commonMain {
dependencies { dependencies {
api(libs.moko.core) api(libs.moko.resources)
} }
} }
} }
+4 -4
View File
@@ -26,10 +26,10 @@ android {
} }
dependencies { dependencies {
implementation(androidx.test.ext) implementation(libs.androidx.test.junit)
implementation(androidx.test.espresso.core) implementation(libs.androidx.test.espresso.core)
implementation(androidx.test.uiautomator) implementation(libs.androidx.test.uiautomator)
implementation(androidx.benchmark.macro) implementation(libs.androidx.benchmark.macroJunit4)
} }
androidComponents { androidComponents {
+12 -12
View File
@@ -35,17 +35,17 @@ dependencies {
// SY <-- // SY <--
// Compose // Compose
implementation(compose.activity) implementation(libs.androidx.activity.compose)
implementation(compose.foundation) implementation(libs.androidx.compose.foundation)
implementation(compose.material3.core) implementation(libs.androidx.compose.material3)
implementation(compose.material.icons) implementation(libs.androidx.compose.materialIcons)
implementation(compose.animation) implementation(libs.androidx.compose.animation)
implementation(compose.animation.graphics) implementation(libs.androidx.compose.animationGraphics)
debugImplementation(compose.ui.tooling) debugImplementation(libs.androidx.compose.uiTooling)
implementation(compose.ui.tooling.preview) implementation(libs.androidx.compose.uiToolingPreview)
implementation(compose.ui.util) implementation(libs.androidx.compose.uiUtil)
implementation(androidx.paging.runtime) implementation(libs.androidx.paging.runtime)
implementation(androidx.paging.compose) implementation(libs.androidx.paging.compose)
implementation(kotlinx.immutables) implementation(libs.kotlinx.collections.immutable)
} }
+2 -3
View File
@@ -19,12 +19,11 @@ dependencies {
implementation(projects.presentationCore) implementation(projects.presentationCore)
api(projects.i18n) api(projects.i18n)
implementation(compose.glance) implementation(libs.androidx.glance.appWidget)
implementation(libs.material) implementation(libs.material)
implementation(kotlinx.immutables) implementation(libs.kotlinx.collections.immutable)
implementation(platform(libs.coil.bom))
implementation(libs.coil.core) implementation(libs.coil.core)
// SY --> // SY -->
-9
View File
@@ -17,15 +17,6 @@ pluginManagement {
dependencyResolutionManagement { dependencyResolutionManagement {
versionCatalogs { versionCatalogs {
create("kotlinx") {
from(files("gradle/kotlinx.versions.toml"))
}
create("androidx") {
from(files("gradle/androidx.versions.toml"))
}
create("compose") {
from(files("gradle/compose.versions.toml"))
}
create("sylibs") { create("sylibs") {
from(files("gradle/sy.versions.toml")) from(files("gradle/sy.versions.toml"))
} }
+7 -8
View File
@@ -12,29 +12,28 @@ kotlin {
sourceSets { sourceSets {
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
api(kotlinx.serialization.json) api(libs.kotlinx.serialization.json)
api(libs.injekt) api(libs.injekt)
api(libs.rxjava) api(libs.rxJava)
api(libs.jsoup) api(libs.jsoup)
implementation(project.dependencies.platform(compose.bom)) implementation(project.dependencies.platform(libs.androidx.compose.bom))
implementation(compose.runtime) implementation(libs.androidx.compose.runtime)
// SY --> // SY -->
api(projects.i18n) api(projects.i18n)
api(projects.i18nSy) api(projects.i18nSy)
api(kotlinx.reflect) api(libs.kotlin.reflect)
// SY <-- // SY <--
} }
} }
val androidMain by getting { val androidMain by getting {
dependencies { dependencies {
implementation(projects.core.common) implementation(projects.core.common)
api(libs.preferencektx) api(libs.androidx.preference)
// Workaround for https://youtrack.jetbrains.com/issue/KT-57605 // Workaround for https://youtrack.jetbrains.com/issue/KT-57605
implementation(kotlinx.coroutines.android) implementation(libs.kotlinx.coroutines.android)
implementation(project.dependencies.platform(kotlinx.coroutines.bom))
} }
} }
} }
+1 -1
View File
@@ -27,7 +27,7 @@ kotlin {
// Move ChapterRecognition to separate module? // Move ChapterRecognition to separate module?
implementation(projects.domain) implementation(projects.domain)
implementation(kotlinx.bundles.serialization) implementation(libs.bundles.serialization)
} }
} }
} }