2020-12-31 11:28:34 -05:00
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("com.android.application")
id("com.mikepenz.aboutlibraries.plugin")
kotlin("android")
kotlin("plugin.serialization")
id("com.github.zellius.shortcut-helper")
}
2020-12-31 11:32:18 -05:00
if (gradle.startParameter.taskRequests.toString().contains("Standard")) {
2022-03-04 15:58:31 +01:00
apply<com.google.gms.googleservices.GoogleServicesPlugin>()
2020-12-31 11:32:18 -05:00
}
2020-12-31 11:28:34 -05:00
shortcutHelper.setFilePath("./shortcuts.xml")
2022-08-28 15:45:33 +02:00
val SUPPORTED_ABIS = setOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
2021-06-01 09:55:03 -04:00
2020-12-31 11:28:34 -05:00
android {
2022-07-02 19:08:22 +02:00
namespace = "eu.kanade.tachiyomi"
2020-12-31 11:28:34 -05:00
defaultConfig {
applicationId = "eu.kanade.tachiyomi"
2023-07-10 16:44:48 -04:00
2024-01-08 18:17:25 -05:00
versionCode = 118
versionName = "0.15.2"
2020-12-31 11:28:34 -05:00
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
buildConfigField("String", "BUILD_TIME", "\"${getBuildTime()}\"")
buildConfigField("boolean", "INCLUDE_UPDATER", "false")
2021-10-09 21:28:43 +07:00
buildConfigField("boolean", "PREVIEW", "false")
2020-12-31 11:28:34 -05:00
2021-01-17 11:09:29 -05:00
// Please disable ACRA or use your own instance in forked versions of the project
buildConfigField("String", "ACRA_URI", "\"https://tachiyomi.kanade.eu/crash_report\"")
2020-12-31 11:28:34 -05:00
ndk {
2021-06-01 09:55:03 -04:00
abiFilters += SUPPORTED_ABIS
2020-12-31 11:28:34 -05:00
}
2021-11-07 09:20:13 -05:00
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2020-12-31 11:28:34 -05:00
}
2021-06-01 09:55:03 -04:00
splits {
abi {
2021-08-06 15:38:16 -04:00
isEnable = true
2021-06-01 09:55:03 -04:00
reset()
include(*SUPPORTED_ABIS.toTypedArray())
isUniversalApk = true
}
2020-12-31 11:28:34 -05:00
}
buildTypes {
named("debug") {
versionNameSuffix = "-${getCommitCount()}"
applicationIdSuffix = ".debug"
2022-11-03 06:46:53 -07:00
isPseudoLocalesEnabled = true
2020-12-31 11:28:34 -05:00
}
named("release") {
2021-05-23 01:47:40 +07:00
isShrinkResources = true
isMinifyEnabled = true
proguardFiles("proguard-android-optimize.txt", "proguard-rules.pro")
2020-12-31 11:28:34 -05:00
}
2021-10-09 21:28:43 +07:00
create("preview") {
initWith(getByName("release"))
buildConfigField("boolean", "PREVIEW", "true")
2023-07-29 22:48:56 -04:00
signingConfig = signingConfigs.getByName("debug")
matchingFallbacks.add("release")
2021-10-09 21:28:43 +07:00
val debugType = getByName("debug")
versionNameSuffix = debugType.versionNameSuffix
applicationIdSuffix = debugType.applicationIdSuffix
}
2022-10-04 20:22:55 +07:00
create("benchmark") {
initWith(getByName("release"))
signingConfig = signingConfigs.getByName("debug")
matchingFallbacks.add("release")
isDebuggable = false
2023-08-04 16:15:25 -04:00
isProfileable = true
2022-10-04 20:22:55 +07:00
versionNameSuffix = "-benchmark"
applicationIdSuffix = ".benchmark"
}
2020-12-31 11:28:34 -05:00
}
2021-05-23 01:47:40 +07:00
sourceSets {
2021-10-09 21:28:43 +07:00
getByName("preview").res.srcDirs("src/debug/res")
2022-10-04 20:22:55 +07:00
getByName("benchmark").res.srcDirs("src/debug/res")
2021-05-23 01:47:40 +07:00
}
2021-08-22 18:05:18 -04:00
flavorDimensions.add("default")
2020-12-31 11:28:34 -05:00
productFlavors {
create("standard") {
buildConfigField("boolean", "INCLUDE_UPDATER", "true")
dimension = "default"
}
create("dev") {
2022-11-03 09:47:27 -04:00
// Include pseudolocales: https://developer.android.com/guide/topics/resources/pseudolocales
resourceConfigurations.addAll(listOf("en", "en_XA", "ar_XB", "xxhdpi"))
2020-12-31 11:28:34 -05:00
dimension = "default"
}
}
2023-04-16 18:02:24 -04:00
packaging {
2023-09-01 23:02:18 -04:00
resources.excludes.addAll(
listOf(
"META-INF/DEPENDENCIES",
"LICENSE.txt",
"META-INF/LICENSE",
"META-INF/LICENSE.txt",
"META-INF/README.md",
"META-INF/NOTICE",
"META-INF/*.kotlin_module",
),
)
2020-12-31 11:28:34 -05:00
}
dependenciesInfo {
includeInApk = false
}
2021-06-01 09:55:03 -04:00
buildFeatures {
viewBinding = true
2022-04-22 17:29:24 -04:00
compose = true
2023-12-16 15:57:45 -05:00
buildConfig = true
2021-11-07 09:20:13 -05:00
// Disable some unused things
aidl = false
renderScript = false
shaders = false
2021-06-01 09:55:03 -04:00
}
2021-07-28 15:08:04 -04:00
lint {
2022-01-25 22:49:50 -05:00
abortOnError = false
checkReleaseBuilds = false
2020-12-31 11:28:34 -05:00
}
2022-04-22 17:29:24 -04:00
composeOptions {
2022-06-29 22:45:11 -04:00
kotlinCompilerExtensionVersion = compose.versions.compiler.get()
2022-04-22 17:29:24 -04:00
}
2020-12-31 11:28:34 -05:00
}
dependencies {
2022-09-10 15:58:45 +02:00
implementation(project(":i18n"))
2022-09-16 00:12:27 +02:00
implementation(project(":core"))
2023-02-26 22:16:49 +01:00
implementation(project(":core-metadata"))
2022-09-16 00:12:27 +02:00
implementation(project(":source-api"))
2023-02-26 22:16:49 +01:00
implementation(project(":source-local"))
2023-01-21 16:37:07 +01:00
implementation(project(":data"))
2023-01-22 16:12:29 +01:00
implementation(project(":domain"))
2023-01-26 23:53:24 +01:00
implementation(project(":presentation-core"))
implementation(project(":presentation-widget"))
2022-09-10 15:58:45 +02:00
2022-04-24 10:22:22 -04:00
// Compose
2022-10-27 05:12:32 +07:00
implementation(platform(compose.bom))
2022-04-24 10:22:22 -04:00
implementation(compose.activity)
2022-04-22 17:29:24 -04:00
implementation(compose.foundation)
implementation(compose.material3.core)
2022-11-12 03:02:45 +07:00
implementation(compose.material.core)
2022-04-23 12:05:00 -04:00
implementation(compose.material.icons)
2022-04-22 17:29:24 -04:00
implementation(compose.animation)
2022-06-25 22:03:48 +07:00
implementation(compose.animation.graphics)
2023-06-23 19:26:35 +07:00
debugImplementation(compose.ui.tooling)
implementation(compose.ui.tooling.preview)
2022-05-24 05:03:46 +07:00
implementation(compose.ui.util)
2022-04-24 10:22:22 -04:00
implementation(compose.accompanist.webview)
2022-12-09 23:20:13 +07:00
implementation(compose.accompanist.systemuicontroller)
2023-11-11 18:13:44 -05:00
lintChecks(compose.lintchecks)
2022-04-22 17:29:24 -04:00
implementation(androidx.paging.runtime)
implementation(androidx.paging.compose)
2022-07-03 16:17:41 +02:00
implementation(libs.bundles.sqlite)
2022-04-22 17:29:24 -04:00
2022-03-04 15:58:31 +01:00
implementation(kotlinx.reflect)
2023-11-11 22:43:50 -05:00
implementation(kotlinx.immutables)
2022-10-30 19:38:18 -04:00
implementation(platform(kotlinx.coroutines.bom))
2022-03-04 15:58:31 +01:00
implementation(kotlinx.bundles.coroutines)
2021-07-04 12:16:12 -04:00
2020-12-31 11:28:34 -05:00
// AndroidX libraries
2022-03-04 15:58:31 +01:00
implementation(androidx.annotation)
implementation(androidx.appcompat)
implementation(androidx.biometricktx)
implementation(androidx.constraintlayout)
implementation(androidx.corektx)
implementation(androidx.splashscreen)
implementation(androidx.recyclerview)
implementation(androidx.viewpager)
2022-10-04 20:22:55 +07:00
implementation(androidx.profileinstaller)
2022-03-04 15:58:31 +01:00
implementation(androidx.bundles.lifecycle)
2020-12-31 11:28:34 -05:00
// Job scheduling
2023-10-14 22:22:46 -04:00
implementation(androidx.workmanager)
2020-12-31 11:28:34 -05:00
2023-03-05 15:37:41 -05:00
// RxJava
2023-08-26 10:30:26 -04:00
implementation(libs.rxjava)
2020-12-31 11:28:34 -05:00
2023-03-05 15:37:41 -05:00
// Networking
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.okhttp)
implementation(libs.okio)
2023-03-05 15:37:41 -05:00
implementation(libs.conscrypt.android) // TLS 1.3 support for Android < 10
2020-12-31 11:28:34 -05:00
2023-02-26 22:16:49 +01:00
// Data serialization (JSON, protobuf, xml)
2022-03-04 15:58:31 +01:00
implementation(kotlinx.bundles.serialization)
2021-09-06 11:54:00 -04:00
2021-08-07 10:50:50 -04:00
// HTML parser
2022-03-04 15:58:31 +01:00
implementation(libs.jsoup)
2021-08-07 10:50:50 -04:00
2020-12-31 11:28:34 -05:00
// Disk
2022-03-04 15:58:31 +01:00
implementation(libs.disklrucache)
implementation(libs.unifile)
implementation(libs.junrar)
2020-12-31 11:28:34 -05:00
// Preferences
2022-03-04 15:58:31 +01:00
implementation(libs.preferencektx)
2020-12-31 11:28:34 -05:00
// Dependency injection
2022-03-04 15:58:31 +01:00
implementation(libs.injekt.core)
2020-12-31 11:28:34 -05:00
2021-08-07 10:50:50 -04:00
// Image loading
2023-05-31 22:48:13 -04:00
implementation(platform(libs.coil.bom))
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.coil)
implementation(libs.subsamplingscaleimageview) {
2021-05-25 19:42:48 +02:00
exclude(module = "image-decoder")
}
2022-03-04 15:58:31 +01:00
implementation(libs.image.decoder)
2020-12-31 11:28:34 -05:00
2021-08-07 10:50:50 -04:00
// UI libraries
2022-03-04 15:58:31 +01:00
implementation(libs.material)
implementation(libs.flexible.adapter.core)
implementation(libs.photoview)
implementation(libs.directionalviewpager) {
2021-09-20 14:33:35 -04:00
exclude(group = "androidx.viewpager", module = "viewpager")
}
2022-03-04 15:58:31 +01:00
implementation(libs.insetter)
2022-12-03 10:35:30 +07:00
implementation(libs.bundles.richtext)
2022-04-23 10:52:19 -04:00
implementation(libs.aboutLibraries.compose)
2022-10-15 22:38:01 +07:00
implementation(libs.bundles.voyager)
2023-03-05 15:37:41 -05:00
implementation(libs.compose.materialmotion)
2023-07-08 21:02:20 +07:00
implementation(libs.swipe)
2020-12-31 11:28:34 -05:00
2021-08-07 10:50:50 -04:00
// Logging
2022-03-04 15:58:31 +01:00
implementation(libs.logcat)
2021-08-07 10:50:50 -04:00
// Crash reports/analytics
2024-01-01 09:53:21 -05:00
implementation(libs.bundles.acra)
2022-03-04 15:58:31 +01:00
"standardImplementation"(libs.firebase.analytics)
2021-08-07 10:50:50 -04:00
2021-09-26 01:31:52 +07:00
// Shizuku
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.shizuku)
2021-09-26 01:31:52 +07:00
2020-12-31 11:28:34 -05:00
// Tests
2023-04-15 09:51:52 -04:00
testImplementation(libs.bundles.test)
2020-12-31 11:28:34 -05:00
// For detecting memory leaks; see https://square.github.io/leakcanary/
2022-03-04 15:58:31 +01:00
// debugImplementation(libs.leakcanary.android)
2022-04-24 16:28:09 -04:00
implementation(libs.leakcanary.plumber)
2020-12-31 11:28:34 -05:00
}
2022-10-04 20:22:55 +07:00
androidComponents {
beforeVariants { variantBuilder ->
// Disables standardBenchmark
if (variantBuilder.buildType == "benchmark") {
2023-09-01 23:02:18 -04:00
variantBuilder.enable = variantBuilder.productFlavors.containsAll(
listOf("default" to "dev"),
)
2022-10-04 20:22:55 +07:00
}
}
2022-10-30 23:42:06 +08:00
onVariants(selector().withFlavor("default" to "standard")) {
// Only excluding in standard flavor because this breaks
// Layout Inspector's Compose tree
it.packaging.resources.excludes.add("META-INF/*.version")
}
2022-10-04 20:22:55 +07:00
}
2020-12-31 11:28:34 -05:00
tasks {
// See https://kotlinlang.org/docs/reference/experimental.html#experimental-status-of-experimental-api(-markers)
withType<KotlinCompile> {
kotlinOptions.freeCompilerArgs += listOf(
2023-02-20 19:02:38 -05:00
"-Xcontext-receivers",
2022-12-03 10:35:30 +07:00
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
2022-10-09 15:49:32 -04:00
"-opt-in=androidx.compose.material.ExperimentalMaterialApi",
2022-04-28 18:09:16 -04:00
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
2022-12-08 11:40:57 +08:00
"-opt-in=androidx.compose.material.ExperimentalMaterialApi",
2022-04-28 18:09:16 -04:00
"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
2022-06-25 22:03:48 +07:00
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
2022-10-15 22:38:01 +07:00
"-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
2022-06-25 22:03:48 +07:00
"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
2023-05-31 22:47:31 -04:00
"-opt-in=coil.annotation.ExperimentalCoilApi",
"-opt-in=com.google.accompanist.permissions.ExperimentalPermissionsApi",
2022-08-10 23:26:34 -04:00
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-opt-in=kotlinx.coroutines.FlowPreview",
2022-08-05 23:11:06 -04:00
"-opt-in=kotlinx.coroutines.InternalCoroutinesApi",
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
2020-12-31 11:28:34 -05:00
)
2022-10-29 20:37:48 +07:00
if (project.findProperty("tachiyomi.enableComposeCompilerMetrics") == "true") {
kotlinOptions.freeCompilerArgs += listOf(
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" +
2023-11-01 10:14:31 +08:00
project.layout.buildDirectory.dir("compose_metrics").get().asFile.absolutePath,
2022-10-29 20:37:48 +07:00
)
kotlinOptions.freeCompilerArgs += listOf(
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" +
2023-11-01 10:14:31 +08:00
project.layout.buildDirectory.dir("compose_metrics").get().asFile.absolutePath,
2022-10-29 20:37:48 +07:00
)
}
2020-12-31 11:28:34 -05:00
}
}
2020-12-31 11:32:18 -05:00
buildscript {
dependencies {
2022-03-04 15:58:31 +01:00
classpath(kotlinx.gradle)
2021-01-17 11:09:29 -05:00
}
}