diff --git a/app/build.gradle b/app/build.gradle index 98270fa70..9d919c1f6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,14 +3,14 @@ import com.android.tools.profgen.ArtProfileSerializer import com.android.tools.profgen.DexFile plugins { - id "com.android.application" - id "kotlin-android" - id "kotlin-kapt" - id "kotlin-parcelize" - id "checkstyle" - id "org.sonarqube" version "4.0.0.2929" - id "org.jetbrains.kotlin.plugin.compose" version "${kotlin_version}" - id 'com.google.dagger.hilt.android' + alias libs.plugins.android.application + alias libs.plugins.kotlin.android + alias libs.plugins.kotlin.compose + alias libs.plugins.kotlin.kapt + alias libs.plugins.kotlin.parcelize + alias libs.plugins.checkstyle + alias libs.plugins.sonarqube + alias libs.plugins.hilt } android { @@ -109,25 +109,6 @@ android { } } -ext { - checkstyleVersion = '10.12.1' - - androidxLifecycleVersion = '2.6.2' - androidxRoomVersion = '2.6.1' - androidxWorkVersion = '2.8.1' - - stateSaverVersion = '1.4.1' - exoPlayerVersion = '2.18.7' - googleAutoServiceVersion = '1.1.1' - groupieVersion = '2.10.1' - markwonVersion = '4.6.2' - - leakCanaryVersion = '2.12' - stethoVersion = '1.6.0' - - coilVersion = '3.0.3' -} - configurations { checkstyle ktlint @@ -137,7 +118,7 @@ checkstyle { getConfigDirectory().set(rootProject.file("checkstyle")) ignoreFailures false showViolations true - toolVersion = checkstyleVersion + toolVersion = libs.versions.checkstyle.get() } tasks.register('runCheckstyle', Checkstyle) { @@ -200,146 +181,140 @@ kapt { dependencies { /** Desugaring **/ - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.0.4' + coreLibraryDesugaring libs.desugar.jdk.libs.nio /** NewPipe libraries **/ - // You can use a local version by uncommenting a few lines in settings.gradle - // Or you can use a commit you pushed to GitHub by just replacing TeamNewPipe with your GitHub - // name and the commit hash with the commit hash of the (pushed) commit you want to test - // This works thanks to JitPack: https://jitpack.io/ - implementation 'com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751' - // WORKAROUND: v0.24.2 can't be resolved by jitpack -> use git commit hash instead - implementation 'com.github.TeamNewPipe:NewPipeExtractor:d3d5f2b3f03a5f2b479b9f6fdf1c2555cbb9de0e' - implementation 'com.github.TeamNewPipe:NoNonsense-FilePicker:5.0.0' + implementation libs.teamnewpipe.nanojson + implementation libs.teamnewpipe.newpipe.extractor + implementation libs.teamnewpipe.nononsense.filepicker /** Checkstyle **/ - checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}" - ktlint 'com.pinterest:ktlint:0.45.2' + checkstyle libs.tools.checkstyle + ktlint libs.tools.ktlint /** Kotlin **/ - implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlin_version}" + implementation libs.kotlin.stdlib /** AndroidX **/ - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.core:core-ktx:1.12.0' - implementation 'androidx.documentfile:documentfile:1.0.1' - implementation 'androidx.fragment:fragment-compose:1.8.2' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:${androidxLifecycleVersion}" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:${androidxLifecycleVersion}" - implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' - implementation 'androidx.media:media:1.7.0' - implementation 'androidx.preference:preference:1.2.1' - implementation 'androidx.recyclerview:recyclerview:1.3.2' - implementation "androidx.room:room-runtime:${androidxRoomVersion}" - implementation "androidx.room:room-rxjava3:${androidxRoomVersion}" - kapt "androidx.room:room-compiler:${androidxRoomVersion}" - implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' + implementation libs.androidx.appcompat + implementation libs.androidx.cardview + implementation libs.androidx.constraintlayout + implementation libs.androidx.core.ktx + implementation libs.androidx.documentfile + implementation libs.androidx.fragment.compose + implementation libs.androidx.lifecycle.livedata + implementation libs.androidx.lifecycle.viewmodel + implementation libs.androidx.localbroadcastmanager + implementation libs.androidx.media + implementation libs.androidx.preference + implementation libs.androidx.recyclerview + implementation libs.androidx.room.runtime + implementation libs.androidx.room.rxjava3 + kapt libs.androidx.room.compiler + implementation libs.androidx.swiperefreshlayout // Newer version specified to prevent accessibility regressions with RecyclerView, see: // https://developer.android.com/jetpack/androidx/releases/viewpager2#1.1.0-alpha01 - implementation 'androidx.viewpager2:viewpager2:1.1.0-beta02' - implementation "androidx.work:work-runtime-ktx:${androidxWorkVersion}" - implementation "androidx.work:work-rxjava3:${androidxWorkVersion}" - implementation 'com.google.android.material:material:1.11.0' + implementation libs.androidx.viewpager2 + implementation libs.androidx.work.runtime + implementation libs.androidx.work.rxjava3 + implementation libs.androidx.material /** Third-party libraries **/ // Instance state boilerplate elimination - implementation 'com.github.livefront:bridge:v2.0.2' - implementation "com.evernote:android-state:$stateSaverVersion" - kapt "com.evernote:android-state-processor:$stateSaverVersion" + implementation libs.livefront.bridge + implementation libs.android.state + kapt libs.android.state.processor // HTML parser - implementation "org.jsoup:jsoup:1.17.2" + implementation libs.jsoup // HTTP client - implementation "com.squareup.okhttp3:okhttp:4.12.0" + implementation libs.okhttp // Media player - implementation "com.google.android.exoplayer:exoplayer-core:${exoPlayerVersion}" - implementation "com.google.android.exoplayer:exoplayer-dash:${exoPlayerVersion}" - implementation "com.google.android.exoplayer:exoplayer-database:${exoPlayerVersion}" - implementation "com.google.android.exoplayer:exoplayer-datasource:${exoPlayerVersion}" - implementation "com.google.android.exoplayer:exoplayer-hls:${exoPlayerVersion}" - implementation "com.google.android.exoplayer:exoplayer-smoothstreaming:${exoPlayerVersion}" - implementation "com.google.android.exoplayer:exoplayer-ui:${exoPlayerVersion}" - implementation "com.google.android.exoplayer:extension-mediasession:${exoPlayerVersion}" + implementation libs.exoplayer.core + implementation libs.exoplayer.dash + implementation libs.exoplayer.database + implementation libs.exoplayer.datasource + implementation libs.exoplayer.hls + implementation libs.exoplayer.smoothstreaming + implementation libs.exoplayer.ui + implementation libs.extension.mediasession // Metadata generator for service descriptors - compileOnly "com.google.auto.service:auto-service-annotations:${googleAutoServiceVersion}" - kapt "com.google.auto.service:auto-service:${googleAutoServiceVersion}" + compileOnly libs.auto.service + kapt libs.auto.service.kapt // Manager for complex RecyclerView layouts - implementation "com.github.lisawray.groupie:groupie:${groupieVersion}" - implementation "com.github.lisawray.groupie:groupie-viewbinding:${groupieVersion}" + implementation libs.lisawray.groupie + implementation libs.lisawray.groupie.viewbinding // Image loading - implementation "io.coil-kt.coil3:coil-compose:${coilVersion}" - implementation "io.coil-kt.coil3:coil-network-okhttp:${coilVersion}" + implementation libs.coil.compose // Markdown library for Android - implementation "io.noties.markwon:core:${markwonVersion}" - implementation "io.noties.markwon:linkify:${markwonVersion}" + implementation libs.markwon.core + implementation libs.markwon.linkify // Crash reporting - implementation "ch.acra:acra-core:5.11.3" + implementation libs.acra.core // Properly restarting - implementation 'com.jakewharton:process-phoenix:2.1.2' + implementation libs.process.phoenix // Reactive extensions for Java VM - implementation "io.reactivex.rxjava3:rxjava:3.1.8" - implementation "io.reactivex.rxjava3:rxandroid:3.0.2" + implementation libs.rxjava3.rxjava + implementation libs.rxjava3.rxandroid // RxJava binding APIs for Android UI widgets - implementation "com.jakewharton.rxbinding4:rxbinding:4.0.0" + implementation libs.rxbinding4.rxbinding // Date and time formatting - implementation "org.ocpsoft.prettytime:prettytime:5.0.8.Final" + implementation libs.prettytime // Jetpack Compose - implementation(platform('androidx.compose:compose-bom:2024.10.01')) - implementation 'androidx.compose.material3:material3' - implementation 'androidx.compose.material3.adaptive:adaptive' - implementation 'androidx.activity:activity-compose' - implementation 'androidx.compose.ui:ui-tooling-preview' - implementation 'androidx.lifecycle:lifecycle-viewmodel-compose' - implementation 'androidx.compose.ui:ui-text' // Needed for parsing HTML to AnnotatedString - implementation 'androidx.compose.material:material-icons-extended' + implementation(platform(libs.androidx.compose.bom)) + implementation libs.androidx.compose.material3 + implementation libs.androidx.compose.adaptive + implementation libs.androidx.activity.compose + implementation libs.androidx.compose.ui.tooling.preview + implementation libs.androidx.lifecycle.viewmodel.compose + implementation libs.androidx.compose.ui.text // Needed for parsing HTML to AnnotatedString + implementation libs.androidx.compose.material.icons.extended // Jetpack Compose related dependencies - implementation 'androidx.paging:paging-compose:3.3.2' - implementation "androidx.navigation:navigation-compose:2.8.3" + implementation libs.androidx.paging.compose + implementation libs.androidx.navigation.compose // Coroutines interop - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.8.1' + implementation libs.kotlinx.coroutines.rx3 // Hilt - implementation("com.google.dagger:hilt-android:2.51.1") - kapt("com.google.dagger:hilt-compiler:2.51.1") + implementation libs.hilt.android + kapt(libs.hilt.compiler) // Scroll - implementation 'com.github.nanihadesuka:LazyColumnScrollbar:2.2.0' + implementation libs.lazycolumnscrollbar /** Debugging **/ // Memory leak detection - debugImplementation "com.squareup.leakcanary:leakcanary-object-watcher-android:${leakCanaryVersion}" - debugImplementation "com.squareup.leakcanary:plumber-android:${leakCanaryVersion}" - debugImplementation "com.squareup.leakcanary:leakcanary-android-core:${leakCanaryVersion}" + debugImplementation libs.leakcanary.object.watcher + debugImplementation libs.leakcanary.plumber.android + debugImplementation libs.leakcanary.android.core // Debug bridge for Android - debugImplementation "com.facebook.stetho:stetho:${stethoVersion}" - debugImplementation "com.facebook.stetho:stetho-okhttp3:${stethoVersion}" + debugImplementation libs.stetho + debugImplementation libs.stetho.okhttp3 // Jetpack Compose - debugImplementation 'androidx.compose.ui:ui-tooling' + debugImplementation libs.androidx.compose.ui.tooling /** Testing **/ - testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:5.6.0' + testImplementation libs.junit + testImplementation libs.mockito.core - androidTestImplementation "androidx.test.ext:junit:1.1.5" - androidTestImplementation "androidx.test:runner:1.5.2" - androidTestImplementation "androidx.room:room-testing:${androidxRoomVersion}" - androidTestImplementation "org.assertj:assertj-core:3.24.2" + androidTestImplementation libs.androidx.junit + androidTestImplementation libs.androidx.runner + androidTestImplementation libs.androidx.room.testing + androidTestImplementation libs.assertj.core } static String getGitWorkingBranch() { diff --git a/build.gradle b/build.gradle index 25568c220..ec8bb05c3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,14 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '2.0.21' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.7.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.google.dagger:hilt-android-gradle-plugin:2.51.1' + classpath libs.android.tools.build.gradle + classpath libs.kotlin.gradle.plugin + classpath libs.hilt.android.gradle.plugin // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 000000000..d2ff9c058 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,152 @@ +[versions] +acraCore = "5.11.3" +androidState = "1.4.1" +androidx-junit = "1.1.5" +appcompat = "1.6.1" +assertjCore = "3.24.2" +auto-service = "1.1.1" +bridge = "2.0.2" +cardview = "1.0.0" +checkstyle = "10.12.1" +coil = "3.0.3" +constraintlayout = "2.1.4" +core-ktx = "1.12.0" +desugar-jdk-libs-nio = "2.0.4" +documentFile = "1.0.1" +exoplayer = "2.18.7" +fragment-compose = "1.8.2" +gradle = "8.7.1" +groupie = "2.10.1" +hilt = "2.51.1" +jetpack-compose = "2024.10.01" +jsoup = "1.17.2" +junit = "4.13.2" +kotlin = "2.0.21" +kotlinxCoroutinesRx3 = "1.8.1" +ktlint = "0.45.2" +lazycolumnscrollbar = "2.2.0" +leakcanary = "2.12" +lifecycle = "2.6.2" +localbroadcastmanager = "1.1.0" +markwon = "4.6.2" +material = "1.11.0" +media = "1.7.0" +mockitoCore = "5.6.0" +navigationCompose = "2.8.3" +okhttp = "4.12.0" +pagingCompose = "3.3.2" +preference = "1.2.1" +prettytime = "5.0.8.Final" +processPhoenix = "2.1.2" +recyclerview = "1.3.2" +room = "2.6.1" +runner = "1.5.2" +rxandroid = "3.0.2" +rxbinding = "4.0.0" +rxjava = "3.1.8" +sonarqube = "4.0.0.2929" +stetho = "1.6.0" +swiperefreshlayout = "1.1.0" +# You can use a local version by uncommenting a few lines in settings.gradle +# Or you can use a commit you pushed to GitHub by just replacing TeamNewPipe with your GitHub +# name and the commit hash with the commit hash of the (pushed) commit you want to test +# This works thanks to JitPack: https://jitpack.io/ +teamnewpipe-filepicker = "5.0.0" +teamnewpipe-newpipe-extractor = "d3d5f2b3f03a5f2b479b9f6fdf1c2555cbb9de0e" +teamnewpipe-nanojson = "1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751" +viewpager2 = "1.1.0-beta02" +work = "2.8.1" + +[plugins] +android-application = { id = "com.android.application" } +checkstyle = { id = "checkstyle" } +hilt = { id = "com.google.dagger.hilt.android" } +kotlin-android = { id = "kotlin-android" } +kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +kotlin-kapt = { id = "kotlin-kapt" } +kotlin-parcelize = { id = "kotlin-parcelize" } +sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } + +[libraries] +acra-core = { group = "ch.acra", name = "acra-core", version.ref = "acraCore" } +android-state = { group = "com.evernote", name = "android-state", version.ref = "androidState" } +android-state-processor = { group = "com.evernote", name = "android-state-processor", version.ref = "androidState" } +android-tools-build-gradle = { group = "com.android.tools.build", name = "gradle", version.ref = "gradle" } +androidx-activity-compose = { group = "androidx.activity", name = "activity-compose" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +androidx-cardview = { group = "androidx.cardview", name = "cardview", version.ref = "cardview" } +androidx-compose-adaptive = { group = "androidx.compose.material3.adaptive", name = "adaptive" } +androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "jetpack-compose" } +androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" } +androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-compose-ui-text = { group = "androidx.compose.ui", name = "ui-text" } +androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } +androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } +androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" } +androidx-documentfile = { group = "androidx.documentfile", name = "documentfile", version.ref = "documentFile" } +androidx-fragment-compose = { group = "androidx.fragment", name = "fragment-compose", version.ref = "fragment-compose" } +androidx-lifecycle-livedata = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "lifecycle" } +androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycle" } +androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose" } +androidx-localbroadcastmanager = { group = "androidx.localbroadcastmanager", name = "localbroadcastmanager", version.ref = "localbroadcastmanager" } +androidx-material = { group = "com.google.android.material", name = "material", version.ref = "material" } +androidx-media = { group = "androidx.media", name = "media", version.ref = "media" } +androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } +androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-junit" } +androidx-paging-compose = { group = "androidx.paging", name = "paging-compose", version.ref = "pagingCompose" } +androidx-preference = { group = "androidx.preference", name = "preference", version.ref = "preference" } +androidx-recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" } +androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } +androidx-room-rxjava3 = { group = "androidx.room", name = "room-rxjava3", version.ref = "room" } +androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } +androidx-room-testing = { group = "androidx.room", name = "room-testing", version.ref = "room" } +androidx-runner = { group = "androidx.test", name = "runner", version.ref = "runner" } +androidx-swiperefreshlayout = { group = "androidx.swiperefreshlayout", name = "swiperefreshlayout", version.ref = "swiperefreshlayout" } +androidx-viewpager2 = { group = "androidx.viewpager2", name = "viewpager2", version.ref = "viewpager2" } +androidx-work-runtime = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "work" } +androidx-work-rxjava3 = { group = "androidx.work", name = "work-rxjava3", version.ref = "work" } +assertj-core = { group = "org.assertj", name = "assertj-core", version.ref = "assertjCore" } +auto-service = { group = "com.google.auto.service", name = "auto-service-annotations", version.ref = "auto-service" } +auto-service-kapt = { group = "com.google.auto.service", name = "auto-service", version.ref = "auto-service" } +coil-compose = { group = "io.coil-kt.coil3", name = 'coil-compose', version.ref = "coil" } +desugar-jdk-libs-nio = { group = "com.android.tools", name = "desugar_jdk_libs_nio", version.ref = "desugar-jdk-libs-nio" } +exoplayer-core = { group = "com.google.android.exoplayer", name = "exoplayer-core", version.ref = "exoplayer" } +exoplayer-database = { group = "com.google.android.exoplayer", name = "exoplayer-database", version.ref = "exoplayer" } +exoplayer-datasource = { group = "com.google.android.exoplayer", name = "exoplayer-datasource", version.ref = "exoplayer" } +exoplayer-dash = { module = "com.google.android.exoplayer:exoplayer-dash", version.ref = "exoplayer" } +exoplayer-hls = { group = "com.google.android.exoplayer", name = "exoplayer-hls", version.ref = "exoplayer" } +exoplayer-smoothstreaming = { group = "com.google.android.exoplayer", name = "exoplayer-smoothstreaming", version.ref = "exoplayer" } +exoplayer-ui = { group = "com.google.android.exoplayer", name = "exoplayer-ui", version.ref = "exoplayer" } +extension-mediasession = { group = "com.google.android.exoplayer", name = "extension-mediasession", version.ref = "exoplayer" } +hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } +hilt-android-gradle-plugin = { group = "com.google.dagger", name = "hilt-android-gradle-plugin", version.ref = "hilt" } +hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" } +jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoup" } +junit = { group = "junit", name = "junit", version.ref = "junit" } +kotlin-gradle-plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } +kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } +kotlinx-coroutines-rx3 = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-rx3", version.ref = "kotlinxCoroutinesRx3" } +lazycolumnscrollbar = { group = "com.github.nanihadesuka", name = "LazyColumnScrollbar", version.ref = "lazycolumnscrollbar" } +leakcanary-android-core = { module = "com.squareup.leakcanary:leakcanary-android-core", version.ref = "leakcanary" } +leakcanary-object-watcher = { group = "com.squareup.leakcanary", name = "leakcanary-object-watcher-android", version.ref = "leakcanary" } +leakcanary-plumber-android = { group = "com.squareup.leakcanary", name = "plumber-android", version.ref = "leakcanary" } +lisawray-groupie = { group = "com.github.lisawray.groupie", name = "groupie", version.ref = "groupie" } +lisawray-groupie-viewbinding = { group = "com.github.lisawray.groupie", name = "groupie-viewbinding", version.ref = "groupie" } +livefront-bridge = { group = "com.github.livefront", name = "bridge", version.ref = "bridge" } +markwon-core = { group = "io.noties.markwon", name = "core", version.ref = "markwon" } +markwon-linkify = { group = "io.noties.markwon", name = "linkify", version.ref = "markwon" } +mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockitoCore" } +okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } +prettytime = { group = "org.ocpsoft.prettytime", name = "prettytime", version.ref = "prettytime" } +process-phoenix = { group = "com.jakewharton", name = "process-phoenix", version.ref = "processPhoenix" } +rxjava3-rxandroid = { group = "io.reactivex.rxjava3", name = "rxandroid", version.ref = "rxandroid" } +rxbinding4-rxbinding = { group = "com.jakewharton.rxbinding4", name = "rxbinding", version.ref = "rxbinding" } +rxjava3-rxjava = { group = "io.reactivex.rxjava3", name = "rxjava", version.ref = "rxjava" } +stetho = { group = "com.facebook.stetho", name = "stetho", version.ref = "stetho" } +stetho-okhttp3 = { group = "com.facebook.stetho", name = "stetho-okhttp3", version.ref = "stetho" } +teamnewpipe-newpipe-extractor = { group = "com.github.TeamNewPipe", name = "NewPipeExtractor", version.ref = "teamnewpipe-newpipe-extractor" } +teamnewpipe-nononsense-filepicker = { group = "com.github.TeamNewPipe", name = "NoNonsense-FilePicker", version.ref = "teamnewpipe-filepicker" } +teamnewpipe-nanojson = { group = "com.github.TeamNewPipe", name = "nanojson", version.ref = "teamnewpipe-nanojson" } +tools-checkstyle = { group = "com.puppycrawl.tools", name = "checkstyle", version.ref = "checkstyle" } +tools-ktlint = { group = "com.pinterest", name = "ktlint", version.ref = "ktlint" }