build.gradle.kts 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
  2. plugins {
  3. id("com.android.application")
  4. id("com.mikepenz.aboutlibraries.plugin")
  5. kotlin("android")
  6. kotlin("plugin.serialization")
  7. id("com.github.zellius.shortcut-helper")
  8. id("com.squareup.sqldelight")
  9. }
  10. if (gradle.startParameter.taskRequests.toString().contains("Standard")) {
  11. apply<com.google.gms.googleservices.GoogleServicesPlugin>()
  12. }
  13. shortcutHelper.setFilePath("./shortcuts.xml")
  14. val SUPPORTED_ABIS = setOf("armeabi-v7a", "arm64-v8a", "x86")
  15. android {
  16. namespace = "eu.kanade.tachiyomi"
  17. compileSdk = AndroidConfig.compileSdk
  18. ndkVersion = AndroidConfig.ndk
  19. defaultConfig {
  20. applicationId = "eu.kanade.tachiyomi"
  21. minSdk = AndroidConfig.minSdk
  22. targetSdk = AndroidConfig.targetSdk
  23. versionCode = 81
  24. versionName = "0.13.5"
  25. buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
  26. buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
  27. buildConfigField("String", "BUILD_TIME", "\"${getBuildTime()}\"")
  28. buildConfigField("boolean", "INCLUDE_UPDATER", "false")
  29. buildConfigField("boolean", "PREVIEW", "false")
  30. // Please disable ACRA or use your own instance in forked versions of the project
  31. buildConfigField("String", "ACRA_URI", "\"https://tachiyomi.kanade.eu/crash_report\"")
  32. ndk {
  33. abiFilters += SUPPORTED_ABIS
  34. }
  35. testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  36. }
  37. splits {
  38. abi {
  39. isEnable = true
  40. reset()
  41. include(*SUPPORTED_ABIS.toTypedArray())
  42. isUniversalApk = true
  43. }
  44. }
  45. buildTypes {
  46. named("debug") {
  47. versionNameSuffix = "-${getCommitCount()}"
  48. applicationIdSuffix = ".debug"
  49. }
  50. named("release") {
  51. isShrinkResources = true
  52. isMinifyEnabled = true
  53. proguardFiles("proguard-android-optimize.txt", "proguard-rules.pro")
  54. }
  55. create("preview") {
  56. initWith(getByName("release"))
  57. buildConfigField("boolean", "PREVIEW", "true")
  58. val debugType = getByName("debug")
  59. signingConfig = debugType.signingConfig
  60. versionNameSuffix = debugType.versionNameSuffix
  61. applicationIdSuffix = debugType.applicationIdSuffix
  62. }
  63. }
  64. sourceSets {
  65. getByName("preview").res.srcDirs("src/debug/res")
  66. }
  67. flavorDimensions.add("default")
  68. productFlavors {
  69. create("standard") {
  70. buildConfigField("boolean", "INCLUDE_UPDATER", "true")
  71. dimension = "default"
  72. }
  73. create("dev") {
  74. resourceConfigurations.addAll(listOf("en", "xxhdpi"))
  75. dimension = "default"
  76. }
  77. }
  78. packagingOptions {
  79. resources.excludes.addAll(listOf(
  80. "META-INF/DEPENDENCIES",
  81. "LICENSE.txt",
  82. "META-INF/LICENSE",
  83. "META-INF/LICENSE.txt",
  84. "META-INF/README.md",
  85. "META-INF/NOTICE",
  86. "META-INF/*.kotlin_module",
  87. "META-INF/*.version",
  88. ))
  89. }
  90. dependenciesInfo {
  91. includeInApk = false
  92. }
  93. buildFeatures {
  94. viewBinding = true
  95. compose = true
  96. // Disable some unused things
  97. aidl = false
  98. renderScript = false
  99. shaders = false
  100. }
  101. lint {
  102. disable.addAll(listOf("MissingTranslation", "ExtraTranslation"))
  103. abortOnError = false
  104. checkReleaseBuilds = false
  105. }
  106. composeOptions {
  107. kotlinCompilerExtensionVersion = compose.versions.compiler.get()
  108. }
  109. compileOptions {
  110. sourceCompatibility = JavaVersion.VERSION_1_8
  111. targetCompatibility = JavaVersion.VERSION_1_8
  112. }
  113. kotlinOptions {
  114. jvmTarget = JavaVersion.VERSION_1_8.toString()
  115. }
  116. sqldelight {
  117. database("Database") {
  118. packageName = "eu.kanade.tachiyomi"
  119. dialect = "sqlite:3.24"
  120. }
  121. }
  122. }
  123. dependencies {
  124. // Compose
  125. implementation(compose.activity)
  126. implementation(compose.foundation)
  127. implementation(compose.material3.core)
  128. implementation(compose.material3.windowsizeclass)
  129. implementation(compose.material3.adapter)
  130. implementation(compose.material.icons)
  131. implementation(compose.animation)
  132. implementation(compose.animation.graphics)
  133. implementation(compose.ui.tooling)
  134. implementation(compose.ui.util)
  135. implementation(compose.accompanist.webview)
  136. implementation(compose.accompanist.swiperefresh)
  137. implementation(compose.accompanist.flowlayout)
  138. implementation(compose.accompanist.pager.core)
  139. implementation(compose.accompanist.pager.indicators)
  140. implementation(androidx.paging.runtime)
  141. implementation(androidx.paging.compose)
  142. implementation(libs.bundles.sqlite)
  143. implementation(androidx.sqlite)
  144. implementation(libs.sqldelight.android.driver)
  145. implementation(libs.sqldelight.coroutines)
  146. implementation(libs.sqldelight.android.paging)
  147. implementation(kotlinx.reflect)
  148. implementation(kotlinx.bundles.coroutines)
  149. // Source models and interfaces from Tachiyomi 1.x
  150. implementation(libs.tachiyomi.api)
  151. // AndroidX libraries
  152. implementation(androidx.annotation)
  153. implementation(androidx.appcompat)
  154. implementation(androidx.biometricktx)
  155. implementation(androidx.constraintlayout)
  156. implementation(androidx.coordinatorlayout)
  157. implementation(androidx.corektx)
  158. implementation(androidx.splashscreen)
  159. implementation(androidx.recyclerview)
  160. implementation(androidx.viewpager)
  161. implementation(androidx.bundles.lifecycle)
  162. // Job scheduling
  163. implementation(androidx.bundles.workmanager)
  164. // RX
  165. implementation(libs.bundles.reactivex)
  166. implementation(libs.flowreactivenetwork)
  167. // Network client
  168. implementation(libs.bundles.okhttp)
  169. implementation(libs.okio)
  170. // TLS 1.3 support for Android < 10
  171. implementation(libs.conscrypt.android)
  172. // Data serialization (JSON, protobuf)
  173. implementation(kotlinx.bundles.serialization)
  174. // JavaScript engine
  175. implementation(libs.bundles.js.engine)
  176. // HTML parser
  177. implementation(libs.jsoup)
  178. // Disk
  179. implementation(libs.disklrucache)
  180. implementation(libs.unifile)
  181. implementation(libs.junrar)
  182. // Preferences
  183. implementation(libs.preferencektx)
  184. implementation(libs.flowpreferences)
  185. // Model View Presenter
  186. implementation(libs.bundles.nucleus)
  187. // Dependency injection
  188. implementation(libs.injekt.core)
  189. // Image loading
  190. implementation(libs.bundles.coil)
  191. implementation(libs.subsamplingscaleimageview) {
  192. exclude(module = "image-decoder")
  193. }
  194. implementation(libs.image.decoder)
  195. // Sort
  196. implementation(libs.natural.comparator)
  197. // UI libraries
  198. implementation(libs.material)
  199. implementation(libs.androidprocessbutton)
  200. implementation(libs.flexible.adapter.core)
  201. implementation(libs.flexible.adapter.ui)
  202. implementation(libs.viewstatepageradapter)
  203. implementation(libs.photoview)
  204. implementation(libs.directionalviewpager) {
  205. exclude(group = "androidx.viewpager", module = "viewpager")
  206. }
  207. implementation(libs.insetter)
  208. implementation(libs.markwon)
  209. implementation(libs.aboutLibraries.compose)
  210. // Conductor
  211. implementation(libs.bundles.conductor)
  212. // FlowBinding
  213. implementation(libs.bundles.flowbinding)
  214. // Logging
  215. implementation(libs.logcat)
  216. // Crash reports/analytics
  217. implementation(libs.acra.http)
  218. "standardImplementation"(libs.firebase.analytics)
  219. // Shizuku
  220. implementation(libs.bundles.shizuku)
  221. // Tests
  222. testImplementation(libs.junit)
  223. // For detecting memory leaks; see https://square.github.io/leakcanary/
  224. // debugImplementation(libs.leakcanary.android)
  225. implementation(libs.leakcanary.plumber)
  226. }
  227. tasks {
  228. withType<Test> {
  229. useJUnitPlatform()
  230. testLogging {
  231. events("passed", "skipped", "failed")
  232. }
  233. }
  234. // See https://kotlinlang.org/docs/reference/experimental.html#experimental-status-of-experimental-api(-markers)
  235. withType<KotlinCompile> {
  236. kotlinOptions.freeCompilerArgs += listOf(
  237. "-opt-in=kotlinx.coroutines.InternalCoroutinesApi",
  238. "-opt-in=coil.annotation.ExperimentalCoilApi",
  239. "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
  240. "-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
  241. "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
  242. "-opt-in=androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi",
  243. "-opt-in=androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi",
  244. "-opt-in=com.google.accompanist.pager.ExperimentalPagerApi",
  245. )
  246. }
  247. // Duplicating Hebrew string assets due to some locale code issues on different devices
  248. val copyHebrewStrings = task("copyHebrewStrings", type = Copy::class) {
  249. from("./src/main/res/values-he")
  250. into("./src/main/res/values-iw")
  251. include("**/*")
  252. }
  253. preBuild {
  254. dependsOn(formatKotlin, copyHebrewStrings)
  255. }
  256. }
  257. buildscript {
  258. dependencies {
  259. classpath(kotlinx.gradle)
  260. }
  261. }