diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ae3236ebc..5efbb4f46 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -8,15 +8,15 @@ val isRelease: Boolean get() = gradle.startParameter.taskNames.any { it.contains("Release") } plugins { - id("com.android.application") - kotlin("android") - id("kotlin-parcelize") - kotlin("plugin.serialization") - id("com.google.devtools.ksp") - id("com.diffplug.spotless") - id("com.mikepenz.aboutlibraries.plugin") - id("org.mozilla.rust-android-gradle.rust-android") - id("dev.shreyaspatil.compose-compiler-report-generator") + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.ksp) + alias(libs.plugins.spotless) + alias(libs.plugins.aboutlibrariesPlugin) + alias(libs.plugins.rustAndroidPlugin) + alias(libs.plugins.composeCompilerReportGenerator) } android { @@ -161,7 +161,7 @@ android { } composeOptions { - kotlinCompilerExtensionVersion = "1.5.3" + kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() } namespace = "com.hippo.ehviewer" @@ -169,102 +169,76 @@ android { dependencies { // https://developer.android.com/jetpack/androidx/releases/activity - implementation("androidx.activity:activity-compose:1.8.0") - implementation("androidx.appcompat:appcompat:1.6.1") - implementation("androidx.biometric:biometric-ktx:1.2.0-alpha05") - implementation("androidx.browser:browser:1.6.0") - implementation("androidx.collection:collection-ktx:1.3.0") + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.biometric) + implementation(libs.androidx.browser) + implementation(libs.androidx.collection) // https://developer.android.com/jetpack/androidx/releases/compose-material3 - // api(platform("androidx.compose:compose-bom:2023.05.00")) - api(platform("dev.chrisbanes.compose:compose-bom:2023.11.00-alpha01")) - implementation("androidx.compose.material:material-icons-extended") - implementation("androidx.compose.material3:material3") - implementation("androidx.compose.material3:material3-window-size-class") - implementation("androidx.compose.ui:ui-util") + api(platform(libs.compose.bom)) + implementation(libs.bundles.compose) - implementation("androidx.core:core-ktx:1.12.0") + implementation(libs.androidx.core) - implementation("androidx.constraintlayout:constraintlayout-compose:1.1.0-alpha13") - implementation("androidx.coordinatorlayout:coordinatorlayout:1.2.0") - implementation("androidx.fragment:fragment-ktx:1.7.0-alpha06") + implementation(libs.androidx.constraintlayout.compose) + implementation(libs.androidx.coordinatorlayout) + implementation(libs.androidx.fragment) // https://developer.android.com/jetpack/androidx/releases/lifecycle - implementation("androidx.lifecycle:lifecycle-process:2.6.2") + implementation(libs.androidx.lifecycle.process) // https://developer.android.com/jetpack/androidx/releases/navigation - val navigation = "2.7.4" - implementation("androidx.navigation:navigation-fragment-ktx:$navigation") - implementation("androidx.navigation:navigation-ui-ktx:$navigation") - implementation("androidx.navigation:navigation-compose:$navigation") + implementation(libs.bundles.androidx.navigation) // https://developer.android.com/jetpack/androidx/releases/paging - val paging = "3.2.1" - implementation("androidx.paging:paging-compose:$paging") - implementation("androidx.paging:paging-runtime-ktx:$paging") - implementation("androidx.recyclerview:recyclerview:1.3.1") - implementation("androidx.recyclerview:recyclerview-selection:1.2.0-alpha01") + implementation(libs.bundles.androidx.paging) + + implementation(libs.bundles.androidx.recyclerview) // https://developer.android.com/jetpack/androidx/releases/room - val room = "2.6.0-rc01" - ksp("androidx.room:room-compiler:$room") - implementation("androidx.room:room-paging:$room") + ksp(libs.androidx.room.compiler) + implementation(libs.androidx.room.paging) - implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01") - implementation("androidx.work:work-runtime-ktx:2.8.1") - implementation("com.drakeet.drawer:drawer:1.0.3") - implementation("com.github.chrisbanes:PhotoView:2.3.0") // Dead Dependency - implementation("com.github.tachiyomiorg:DirectionalViewPager:1.0.0") // Dead Dependency + implementation(libs.androidx.swiperefreshlayout) + implementation(libs.androidx.work.runtime) + implementation(libs.drawer) + implementation(libs.photoview) // Dead Dependency + implementation(libs.directionalviewpager) // Dead Dependency // https://github.com/google/accompanist/releases - val accompanist = "0.32.0" - implementation("com.google.accompanist:accompanist-themeadapter-material3:$accompanist") - implementation("com.google.accompanist:accompanist-webview:$accompanist") - implementation("com.google.android.material:material:1.11.0-alpha03") + implementation(libs.bundles.accompanist) + implementation(libs.material) - val splitties = "3.0.0" - implementation("com.louiscad.splitties:splitties-appctx:$splitties") - implementation("com.louiscad.splitties:splitties-systemservices:$splitties") - implementation("com.louiscad.splitties:splitties-preferences:$splitties") - implementation("com.louiscad.splitties:splitties-arch-room:$splitties") + implementation(libs.bundles.splitties) // https://square.github.io/okhttp/changelogs/changelog/ - implementation(platform("com.squareup.okhttp3:okhttp-bom:5.0.0-alpha.11")) - implementation("com.squareup.okhttp3:okhttp-android") - implementation("com.squareup.okhttp3:okhttp-coroutines") + implementation(platform(libs.okhttp.bom)) + implementation(libs.bundles.okhttp) - implementation("com.squareup.okio:okio-jvm:3.6.0") + implementation(libs.okio.jvm) - implementation("com.mikepenz:aboutlibraries-core:10.9.1") + implementation(libs.aboutlibraries.core) - implementation("dev.chrisbanes.insetter:insetter:0.6.1") // Dead Dependency - implementation("dev.rikka.rikkax.core:core-ktx:1.4.1") - implementation("dev.rikka.rikkax.insets:insets:1.3.0") - implementation("dev.rikka.rikkax.layoutinflater:layoutinflater:1.3.0") + implementation(libs.insetter) // Dead Dependency + implementation(libs.bundles.rikkax) - implementation(platform("io.arrow-kt:arrow-stack:1.2.1")) - implementation("io.arrow-kt:arrow-fx-coroutines") + implementation(platform(libs.arrow.stack)) + implementation(libs.arrow.fx.coroutines) // https://coil-kt.github.io/coil/changelog/ - implementation(platform("io.coil-kt:coil-bom:2.4.0")) - implementation("io.coil-kt:coil-compose") - implementation("io.coil-kt:coil-gif") + implementation(platform(libs.coil.bom)) + implementation(libs.bundles.coil) - val ktor = "2.3.5" - implementation("io.ktor:ktor-io-jvm:$ktor") - implementation("io.ktor:ktor-utils-jvm:$ktor") + implementation(libs.bundles.ktor) - val serialization = "1.6.0" - implementation("org.jetbrains.kotlinx:kotlinx-serialization-cbor:$serialization") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serialization") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json-okio:$serialization") + implementation(libs.bundles.kotlinx.serialization) - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") - implementation("org.jsoup:jsoup:1.16.1") + implementation(libs.kotlinx.coroutines.android) + implementation(libs.jsoup) - val chunker = "4.0.0" - debugImplementation("com.github.chuckerteam.chucker:library:$chunker") - releaseImplementation("com.github.chuckerteam.chucker:library-no-op:$chunker") + debugImplementation(libs.chucker) + releaseImplementation(libs.chucker.nop) - debugImplementation("com.squareup.leakcanary:leakcanary-android:2.12") + debugImplementation(libs.leakcanary.android) } ksp { @@ -294,7 +268,7 @@ cargo { if (isRelease) profile = "release" } -val ktlintVersion = "1.0.1-SNAPSHOT" +val ktlintVersion = libs.versions.ktlint.get() spotless { kotlin { diff --git a/build.gradle.kts b/build.gradle.kts index c951ed551..81a014ce7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,12 +1,13 @@ plugins { - id("com.android.application") version "8.1.2" apply false - kotlin("android") version "1.9.10" apply false - kotlin("plugin.serialization") version "1.9.10" apply false - id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false - id("com.diffplug.spotless") version "6.22.0" apply false - id("com.mikepenz.aboutlibraries.plugin") version "10.9.1" apply false - id("org.mozilla.rust-android-gradle.rust-android") version "0.9.3" apply false - id("dev.shreyaspatil.compose-compiler-report-generator") version "1.1.0" apply false + alias(libs.plugins.android.application) apply false + alias(libs.plugins.kotlin.android) apply false + alias(libs.plugins.kotlin.parcelize) apply false + alias(libs.plugins.kotlin.serialization) apply false + alias(libs.plugins.ksp) apply false + alias(libs.plugins.spotless) apply false + alias(libs.plugins.aboutlibrariesPlugin) apply false + alias(libs.plugins.rustAndroidPlugin) apply false + alias(libs.plugins.composeCompilerReportGenerator) apply false } tasks.register("Delete", Delete::class) { @@ -15,6 +16,6 @@ tasks.register("Delete", Delete::class) { buildscript { dependencies { - classpath("com.android.tools:r8:8.3.6-dev") + classpath(libs.r8) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 000000000..1b3b4dc99 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,147 @@ +[versions] +aboutlibraries = "10.9.1" +android-tools-r8 = "8.3.6-dev" +androidx-activity = "1.8.0" +androidx-appcompat = "1.6.1" +androidx-biometric = "1.2.0-alpha05" +androidx-browser = "1.6.0" +androidx-collection = "1.3.0" +androidx-constraintlayout-compose = "1.1.0-alpha13" +androidx-coordinatorlayout = "1.2.0" +androidx-core = "1.12.0" +androidx-fragment = "1.7.0-alpha06" +androidx-lifecycle = "2.6.2" +androidx-navigation = "2.7.4" +androidx-paging = "3.2.1" +androidx-paging-compose = "3.2.1" +androidx-recyclerview = "1.3.1" +androidx-recyclerview-selection = "1.2.0-alpha01" +androidx-room = "2.6.0-rc01" +androidx-swiperefreshlayout = "1.2.0-alpha01" +androidx-work = "2.8.1" +arrow = "1.2.1" +chucker = "4.0.0" +coil = "2.4.0" +compose-bom = "2023.11.00-alpha01" +compose-compiler = "1.5.3" +google-accompanist = "0.32.0" +google-android-material = "1.11.0-alpha03" +kotlin = "1.9.10" +kotlinx-coroutines = "1.7.3" +kotlinx-serialization = "1.6.0" +ktlint = "1.0.1-SNAPSHOT" +ktor = "2.3.5" +leakcanary = "2.12" +okhttp3 = "5.0.0-alpha.11" +okio = "3.6.0" +splitties = "3.0.0" + +[libraries] +aboutlibraries-core = { module = "com.mikepenz:aboutlibraries-core", version.ref = "aboutlibraries" } + +accompanist-themeadapter-material3 = { module = "com.google.accompanist:accompanist-themeadapter-material3", version.ref = "google-accompanist" } +accompanist-webview = { module = "com.google.accompanist:accompanist-webview", version.ref = "google-accompanist" } + +androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } +androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } +androidx-biometric = { module = "androidx.biometric:biometric-ktx", version.ref = "androidx-biometric" } +androidx-browser = { module = "androidx.browser:browser", version.ref = "androidx-browser" } +androidx-collection = { module = "androidx.collection:collection-ktx", version.ref = "androidx-collection" } +androidx-constraintlayout-compose = { module = "androidx.constraintlayout:constraintlayout-compose", version.ref = "androidx-constraintlayout-compose" } +androidx-coordinatorlayout = { module = "androidx.coordinatorlayout:coordinatorlayout", version.ref = "androidx-coordinatorlayout" } +androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } +androidx-fragment = { module = "androidx.fragment:fragment-ktx", version.ref = "androidx-fragment" } +androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "androidx-lifecycle" } + +androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "androidx-navigation" } +androidx-navigation-fragment = { module = "androidx.navigation:navigation-fragment-ktx", version.ref = "androidx-navigation" } +androidx-navigation-ui = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "androidx-navigation" } + +androidx-paging-compose = { module = "androidx.paging:paging-compose", version.ref = "androidx-paging-compose" } +androidx-paging-runtime = { module = "androidx.paging:paging-runtime-ktx", version.ref = "androidx-paging" } + +androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "androidx-recyclerview" } +androidx-recyclerview-selection = { module = "androidx.recyclerview:recyclerview-selection", version.ref = "androidx-recyclerview-selection" } + +androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "androidx-room" } +androidx-room-paging = { module = "androidx.room:room-paging", version.ref = "androidx-room" } + +androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefreshlayout" } +androidx-work-runtime = { module = "androidx.work:work-runtime-ktx", version.ref = "androidx-work" } + +arrow-fx-coroutines = { module = "io.arrow-kt:arrow-fx-coroutines" } +arrow-stack = { module = "io.arrow-kt:arrow-stack", version.ref = "arrow" } + +chucker = { module = "com.github.chuckerteam.chucker:library", version.ref = "chucker" } +chucker-nop = { module = "com.github.chuckerteam.chucker:library-no-op", version.ref = "chucker" } + +coil-bom = { module = "io.coil-kt:coil-bom", version.ref = "coil" } +coil-compose = { module = "io.coil-kt:coil-compose" } +coil-gif = { module = "io.coil-kt:coil-gif" } + +compose-bom = { module = "dev.chrisbanes.compose:compose-bom", version.ref = "compose-bom" } +compose-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } +compose-material3 = { module = "androidx.compose.material3:material3" } +compose-material3-windowsizeclass = { module = "androidx.compose.material3:material3-window-size-class" } +compose-ui-util = { module = "androidx.compose.ui:ui-util" } + +directionalviewpager = "com.github.tachiyomiorg:DirectionalViewPager:1.0.0" +drawer = "com.drakeet.drawer:drawer:1.0.3" +insetter = "dev.chrisbanes.insetter:insetter:0.6.1" +jsoup = "org.jsoup:jsoup:1.16.1" + +kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" } +kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlinx-serialization" } +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } +kotlinx-serialization-json-okio = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-okio", version.ref = "kotlinx-serialization" } + +ktlint = { module = "com.pinterest:ktlint", version.ref = "ktlint" } + +ktor-io-jvm = { module = "io.ktor:ktor-io-jvm", version.ref = "ktor" } +ktor-utils-jvm = { module = "io.ktor:ktor-utils-jvm", version.ref = "ktor" } + +leakcanary-android = { module = "com.squareup.leakcanary:leakcanary-android", version.ref = "leakcanary" } + +material = { module = "com.google.android.material:material", version.ref = "google-android-material" } + +okhttp-android = { module = "com.squareup.okhttp3:okhttp-android" } +okhttp-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp3" } +okhttp-coroutines = { module = "com.squareup.okhttp3:okhttp-coroutines" } +okio-jvm = { module = "com.squareup.okio:okio-jvm", version.ref = "okio" } + +photoview = "com.github.chrisbanes:PhotoView:2.3.0" + +r8 = { module = "com.android.tools:r8", version.ref = "android-tools-r8" } + +rikkax-core = "dev.rikka.rikkax.core:core-ktx:1.4.1" +rikkax-insets = "dev.rikka.rikkax.insets:insets:1.3.0" +rikkax-layoutinflater = "dev.rikka.rikkax.layoutinflater:layoutinflater:1.3.0" + +splitties-appctx = { module = "com.louiscad.splitties:splitties-appctx", version.ref = "splitties" } +splitties-arch-room = { module = "com.louiscad.splitties:splitties-arch-room", version.ref = "splitties" } +splitties-preferences = { module = "com.louiscad.splitties:splitties-preferences", version.ref = "splitties" } +splitties-systemservices = { module = "com.louiscad.splitties:splitties-systemservices", version.ref = "splitties" } + +[bundles] +accompanist = ["accompanist-themeadapter-material3", "accompanist-webview"] +androidx-navigation = ["androidx-navigation-compose", "androidx-navigation-fragment", "androidx-navigation-ui"] +androidx-paging = ["androidx-paging-compose", "androidx-paging-runtime"] +androidx-recyclerview = ["androidx-recyclerview", "androidx-recyclerview-selection"] +coil = ["coil-compose", "coil-gif"] +compose = ["compose-material-icons-extended", "compose-material3", "compose-material3-windowsizeclass", "compose-ui-util"] +kotlinx-serialization = ["kotlinx-serialization-cbor", "kotlinx-serialization-json", "kotlinx-serialization-json-okio"] +ktor = ["ktor-io-jvm", "ktor-utils-jvm"] +okhttp = ["okhttp-android", "okhttp-coroutines"] +rikkax = ["rikkax-core", "rikkax-insets", "rikkax-layoutinflater"] +splitties = ["splitties-appctx", "splitties-arch-room", "splitties-preferences", "splitties-systemservices"] + +[plugins] +aboutlibrariesPlugin = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" } +android-application = { id = "com.android.application", version = "8.1.2" } +composeCompilerReportGenerator = { id = "dev.shreyaspatil.compose-compiler-report-generator", version = "1.1.0" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } +kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +ksp = { id = "com.google.devtools.ksp", version = "1.9.10-1.0.13" } +rustAndroidPlugin = { id = "org.mozilla.rust-android-gradle.rust-android", version = "0.9.3" } +spotless = { id = "com.diffplug.spotless", version = "6.22.0" }