2020-12-31 17:28:34 +01: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")
2022-04-22 23:29:24 +02:00
id("com.squareup.sqldelight")
2020-12-31 17:28:34 +01:00
}
2020-12-31 17:32:18 +01: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 17:32:18 +01:00
}
2020-12-31 17:28:34 +01:00
shortcutHelper.setFilePath("./shortcuts.xml")
2021-06-01 15:55:03 +02:00
val SUPPORTED_ABIS = setOf("armeabi-v7a", "arm64-v8a", "x86")
2020-12-31 17:28:34 +01:00
android {
2022-07-02 19:08:22 +02:00
namespace = "eu.kanade.tachiyomi"
2022-03-12 22:45:36 +01:00
compileSdk = AndroidConfig.compileSdk
ndkVersion = AndroidConfig.ndk
2020-12-31 17:28:34 +01:00
defaultConfig {
applicationId = "eu.kanade.tachiyomi"
2022-03-12 22:45:36 +01:00
minSdk = AndroidConfig.minSdk
targetSdk = AndroidConfig.targetSdk
2022-05-08 05:48:53 +02:00
versionCode = 81
2022-07-08 21:52:48 +02:00
versionName = "0.13.5"
2020-12-31 17:28:34 +01:00
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
buildConfigField("String", "BUILD_TIME", "\"${getBuildTime()}\"")
buildConfigField("boolean", "INCLUDE_UPDATER", "false")
2021-10-09 16:28:43 +02:00
buildConfigField("boolean", "PREVIEW", "false")
2020-12-31 17:28:34 +01:00
2021-01-17 17:09:29 +01: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 17:28:34 +01:00
ndk {
2021-06-01 15:55:03 +02:00
abiFilters += SUPPORTED_ABIS
2020-12-31 17:28:34 +01:00
}
2021-11-07 15:20:13 +01:00
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2020-12-31 17:28:34 +01:00
}
2021-06-01 15:55:03 +02:00
splits {
abi {
2021-08-06 21:38:16 +02:00
isEnable = true
2021-06-01 15:55:03 +02:00
reset()
include(*SUPPORTED_ABIS.toTypedArray())
isUniversalApk = true
}
2020-12-31 17:28:34 +01:00
}
buildTypes {
named("debug") {
versionNameSuffix = "-${getCommitCount()}"
applicationIdSuffix = ".debug"
}
named("release") {
2021-05-22 20:47:40 +02:00
isShrinkResources = true
isMinifyEnabled = true
proguardFiles("proguard-android-optimize.txt", "proguard-rules.pro")
2020-12-31 17:28:34 +01:00
}
2021-10-09 16:28:43 +02:00
create("preview") {
initWith(getByName("release"))
buildConfigField("boolean", "PREVIEW", "true")
val debugType = getByName("debug")
signingConfig = debugType.signingConfig
versionNameSuffix = debugType.versionNameSuffix
applicationIdSuffix = debugType.applicationIdSuffix
}
2020-12-31 17:28:34 +01:00
}
2021-05-22 20:47:40 +02:00
sourceSets {
2021-10-09 16:28:43 +02:00
getByName("preview").res.srcDirs("src/debug/res")
2021-05-22 20:47:40 +02:00
}
2021-08-23 00:05:18 +02:00
flavorDimensions.add("default")
2020-12-31 17:28:34 +01:00
productFlavors {
create("standard") {
buildConfigField("boolean", "INCLUDE_UPDATER", "true")
dimension = "default"
}
create("dev") {
2021-08-23 00:05:18 +02:00
resourceConfigurations.addAll(listOf("en", "xxhdpi"))
2020-12-31 17:28:34 +01:00
dimension = "default"
}
}
packagingOptions {
2021-08-23 00:05:18 +02:00
resources.excludes.addAll(listOf(
"META-INF/DEPENDENCIES",
"LICENSE.txt",
"META-INF/LICENSE",
"META-INF/LICENSE.txt",
2021-10-16 16:21:25 +02:00
"META-INF/README.md",
2021-08-23 00:05:18 +02:00
"META-INF/NOTICE",
"META-INF/*.kotlin_module",
2021-10-16 16:21:25 +02:00
"META-INF/*.version",
2021-08-23 00:05:18 +02:00
))
2020-12-31 17:28:34 +01:00
}
dependenciesInfo {
includeInApk = false
}
2021-06-01 15:55:03 +02:00
buildFeatures {
viewBinding = true
2022-04-22 23:29:24 +02:00
compose = true
2021-11-07 15:20:13 +01:00
// Disable some unused things
aidl = false
renderScript = false
shaders = false
2021-06-01 15:55:03 +02:00
}
2021-07-28 21:08:04 +02:00
lint {
2022-01-26 04:49:50 +01:00
disable.addAll(listOf("MissingTranslation", "ExtraTranslation"))
abortOnError = false
checkReleaseBuilds = false
2020-12-31 17:28:34 +01:00
}
2022-04-22 23:29:24 +02:00
composeOptions {
2022-06-30 04:45:11 +02:00
kotlinCompilerExtensionVersion = compose.versions.compiler.get()
2022-04-22 23:29:24 +02:00
}
2020-12-31 17:28:34 +01:00
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
2022-05-29 18:12:06 +02:00
sqldelight {
database("Database") {
packageName = "eu.kanade.tachiyomi"
dialect = "sqlite:3.24"
}
}
2020-12-31 17:28:34 +01:00
}
dependencies {
2022-04-24 16:22:22 +02:00
// Compose
implementation(compose.activity)
2022-04-22 23:29:24 +02:00
implementation(compose.foundation)
implementation(compose.material3.core)
2022-06-25 17:03:48 +02:00
implementation(compose.material3.windowsizeclass)
2022-04-22 23:29:24 +02:00
implementation(compose.material3.adapter)
2022-04-23 18:05:00 +02:00
implementation(compose.material.icons)
2022-04-22 23:29:24 +02:00
implementation(compose.animation)
2022-06-25 17:03:48 +02:00
implementation(compose.animation.graphics)
2022-04-22 23:29:24 +02:00
implementation(compose.ui.tooling)
2022-05-24 00:03:46 +02:00
implementation(compose.ui.util)
2022-04-24 16:22:22 +02:00
implementation(compose.accompanist.webview)
2022-05-15 15:59:53 +02:00
implementation(compose.accompanist.swiperefresh)
2022-06-25 17:03:48 +02:00
implementation(compose.accompanist.flowlayout)
2022-04-22 23:29:24 +02:00
implementation(androidx.paging.runtime)
implementation(androidx.paging.compose)
2022-07-03 16:17:41 +02:00
implementation(libs.bundles.sqlite)
2022-05-14 16:04:43 +02:00
implementation(androidx.sqlite)
2022-04-22 23:29:24 +02:00
implementation(libs.sqldelight.android.driver)
implementation(libs.sqldelight.coroutines)
implementation(libs.sqldelight.android.paging)
2022-03-04 15:58:31 +01:00
implementation(kotlinx.reflect)
implementation(kotlinx.bundles.coroutines)
2021-07-04 18:16:12 +02:00
2020-12-31 17:28:34 +01:00
// Source models and interfaces from Tachiyomi 1.x
2022-03-04 15:58:31 +01:00
implementation(libs.tachiyomi.api)
2020-12-31 17:28:34 +01: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.coordinatorlayout)
implementation(androidx.corektx)
implementation(androidx.splashscreen)
implementation(androidx.recyclerview)
implementation(androidx.swiperefreshlayout)
implementation(androidx.viewpager)
implementation(androidx.bundles.lifecycle)
2020-12-31 17:28:34 +01:00
// Job scheduling
2022-04-11 14:56:22 +02:00
implementation(androidx.bundles.workmanager)
2020-12-31 17:28:34 +01:00
2021-08-07 16:50:50 +02:00
// RX
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.reactivex)
implementation(libs.flowreactivenetwork)
2020-12-31 17:28:34 +01:00
// Network client
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.okhttp)
implementation(libs.okio)
2020-12-31 17:28:34 +01:00
// TLS 1.3 support for Android < 10
2022-03-04 15:58:31 +01:00
implementation(libs.conscrypt.android)
2020-12-31 17:28:34 +01:00
2021-08-07 16:50:50 +02:00
// Data serialization (JSON, protobuf)
2022-03-04 15:58:31 +01:00
implementation(kotlinx.bundles.serialization)
2021-09-06 17:54:00 +02:00
2020-12-31 17:28:34 +01:00
// JavaScript engine
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.js.engine)
2020-12-31 17:28:34 +01:00
2021-08-07 16:50:50 +02:00
// HTML parser
2022-03-04 15:58:31 +01:00
implementation(libs.jsoup)
2021-08-07 16:50:50 +02:00
2020-12-31 17:28:34 +01:00
// Disk
2022-03-04 15:58:31 +01:00
implementation(libs.disklrucache)
implementation(libs.unifile)
implementation(libs.junrar)
2020-12-31 17:28:34 +01:00
// Preferences
2022-03-04 15:58:31 +01:00
implementation(libs.preferencektx)
implementation(libs.flowpreferences)
2020-12-31 17:28:34 +01:00
// Model View Presenter
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.nucleus)
2020-12-31 17:28:34 +01:00
// Dependency injection
2022-03-04 15:58:31 +01:00
implementation(libs.injekt.core)
2020-12-31 17:28:34 +01:00
2021-08-07 16:50:50 +02:00
// Image loading
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.coil)
2020-12-31 17:28:34 +01:00
2022-03-04 15:58:31 +01:00
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 17:28:34 +01:00
// Sort
2022-03-04 15:58:31 +01:00
implementation(libs.natural.comparator)
2020-12-31 17:28:34 +01:00
2021-08-07 16:50:50 +02:00
// UI libraries
2022-03-04 15:58:31 +01:00
implementation(libs.material)
implementation(libs.androidprocessbutton)
implementation(libs.flexible.adapter.core)
implementation(libs.flexible.adapter.ui)
implementation(libs.viewstatepageradapter)
implementation(libs.photoview)
implementation(libs.directionalviewpager) {
2021-09-20 20:33:35 +02:00
exclude(group = "androidx.viewpager", module = "viewpager")
}
2022-03-04 15:58:31 +01:00
implementation(libs.insetter)
2022-04-17 17:30:05 +02:00
implementation(libs.markwon)
2022-04-23 16:52:19 +02:00
implementation(libs.aboutLibraries.compose)
2020-12-31 17:28:34 +01:00
// Conductor
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.conductor)
2020-12-31 17:28:34 +01:00
// FlowBinding
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.flowbinding)
2020-12-31 17:28:34 +01:00
2021-08-07 16:50:50 +02:00
// Logging
2022-03-04 15:58:31 +01:00
implementation(libs.logcat)
2021-08-07 16:50:50 +02:00
// Crash reports/analytics
2022-03-04 15:58:31 +01:00
implementation(libs.acra.http)
"standardImplementation"(libs.firebase.analytics)
2021-08-07 16:50:50 +02:00
2021-09-25 20:31:52 +02:00
// Shizuku
2022-03-04 15:58:31 +01:00
implementation(libs.bundles.shizuku)
2021-09-25 20:31:52 +02:00
2020-12-31 17:28:34 +01:00
// Tests
2022-03-04 15:58:31 +01:00
testImplementation(libs.junit)
2020-12-31 17:28:34 +01: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 22:28:09 +02:00
implementation(libs.leakcanary.plumber)
2020-12-31 17:28:34 +01:00
}
tasks {
2022-04-24 22:16:05 +02:00
withType<Test> {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
}
}
2020-12-31 17:28:34 +01:00
// See https://kotlinlang.org/docs/reference/experimental.html#experimental-status-of-experimental-api(-markers)
withType<KotlinCompile> {
kotlinOptions.freeCompilerArgs += listOf(
2022-04-29 00:09:16 +02:00
"-opt-in=kotlin.Experimental",
"-opt-in=kotlin.RequiresOptIn",
"-opt-in=kotlin.ExperimentalStdlibApi",
"-opt-in=kotlinx.coroutines.FlowPreview",
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-opt-in=kotlinx.coroutines.InternalCoroutinesApi",
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-opt-in=coil.annotation.ExperimentalCoilApi",
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
"-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
2022-06-25 17:03:48 +02:00
"-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
"-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
"-opt-in=androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi",
2020-12-31 17:28:34 +01:00
)
}
// Duplicating Hebrew string assets due to some locale code issues on different devices
val copyHebrewStrings = task("copyHebrewStrings", type = Copy::class) {
from("./src/main/res/values-he")
into("./src/main/res/values-iw")
include("**/*")
}
preBuild {
dependsOn(formatKotlin, copyHebrewStrings)
}
}
2020-12-31 17:32:18 +01:00
buildscript {
dependencies {
2022-03-04 15:58:31 +01:00
classpath(kotlinx.gradle)
2021-01-17 17:09:29 +01:00
}
}