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.glance)
  162. implementation(androidx.bundles.lifecycle)
  163. // Job scheduling
  164. implementation(androidx.bundles.workmanager)
  165. // RX
  166. implementation(libs.bundles.reactivex)
  167. implementation(libs.flowreactivenetwork)
  168. // Network client
  169. implementation(libs.bundles.okhttp)
  170. implementation(libs.okio)
  171. // TLS 1.3 support for Android < 10
  172. implementation(libs.conscrypt.android)
  173. // Data serialization (JSON, protobuf)
  174. implementation(kotlinx.bundles.serialization)
  175. // JavaScript engine
  176. implementation(libs.bundles.js.engine)
  177. // HTML parser
  178. implementation(libs.jsoup)
  179. // Disk
  180. implementation(libs.disklrucache)
  181. implementation(libs.unifile)
  182. implementation(libs.junrar)
  183. // Preferences
  184. implementation(libs.preferencektx)
  185. implementation(libs.flowpreferences)
  186. // Model View Presenter
  187. implementation(libs.bundles.nucleus)
  188. // Dependency injection
  189. implementation(libs.injekt.core)
  190. // Image loading
  191. implementation(libs.bundles.coil)
  192. implementation(libs.subsamplingscaleimageview) {
  193. exclude(module = "image-decoder")
  194. }
  195. implementation(libs.image.decoder)
  196. // Sort
  197. implementation(libs.natural.comparator)
  198. // UI libraries
  199. implementation(libs.material)
  200. implementation(libs.androidprocessbutton)
  201. implementation(libs.flexible.adapter.core)
  202. implementation(libs.flexible.adapter.ui)
  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. }