build.gradle.kts 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. import java.io.FileInputStream
  2. import java.util.Properties
  3. plugins {
  4. alias(libs.plugins.compose.compiler)
  5. alias(libs.plugins.android.application)
  6. alias(libs.plugins.kotlin.android)
  7. alias(libs.plugins.kotlin.parcelize)
  8. alias(libs.plugins.kotlin.serialization)
  9. alias(libs.plugins.room)
  10. alias(libs.plugins.ksp)
  11. alias(libs.plugins.google.services)
  12. }
  13. apply(from = "download.gradle")
  14. val versionPropsFile = file("version.properties")
  15. val versionProps = Properties().apply {
  16. if (versionPropsFile.exists()) {
  17. load(FileInputStream(versionPropsFile))
  18. }
  19. }
  20. val versionMajor = versionProps["VERSION_MAJOR"]?.toString()?.toInt() ?: 0
  21. val versionMinor = versionProps["VERSION_MINOR"]?.toString()?.toInt() ?: 0
  22. val versionPatch = versionProps["VERSION_PATCH"]?.toString()?.toInt() ?: 0
  23. val appName = "legado"
  24. val projectVersionName = "$versionMajor.$versionMinor.$versionPatch"
  25. android {
  26. compileSdk = 36
  27. namespace = "io.legado.app"
  28. kotlin {
  29. jvmToolchain {
  30. languageVersion.set(JavaLanguageVersion.of(21))
  31. vendor.set(JvmVendorSpec.ADOPTIUM)
  32. }
  33. }
  34. signingConfigs {
  35. if (project.hasProperty("RELEASE_STORE_FILE")) {
  36. create("myConfig") {
  37. storeFile = file(project.property("RELEASE_STORE_FILE") as String)
  38. storePassword = project.property("RELEASE_STORE_PASSWORD") as String
  39. keyAlias = project.property("RELEASE_KEY_ALIAS") as String
  40. keyPassword = project.property("RELEASE_KEY_PASSWORD") as String
  41. enableV1Signing = true
  42. enableV2Signing = true
  43. enableV3Signing = true
  44. enableV4Signing = true
  45. }
  46. }
  47. }
  48. defaultConfig {
  49. applicationId = "io.legato.kazusa"
  50. minSdk = 26
  51. targetSdk = 36
  52. versionCode = System.getenv("COMMIT_NUMBER")?.toInt()?.let { 10000 + it } ?: 32640
  53. versionName = System.getenv("APP_VERSION_NAME") ?: projectVersionName
  54. testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  55. buildConfigField("String", "Cronet_Version", "\"${project.findProperty("CronetVersion")}\"")
  56. buildConfigField(
  57. "String",
  58. "Cronet_Main_Version",
  59. "\"${project.findProperty("CronetMainVersion")}\""
  60. )
  61. javaCompileOptions {
  62. annotationProcessorOptions {
  63. arguments += mapOf(
  64. "room.incremental" to "true",
  65. "room.expandProjection" to "true",
  66. "room.schemaLocation" to "$projectDir/schemas"
  67. )
  68. }
  69. }
  70. }
  71. buildFeatures {
  72. compose = true
  73. buildConfig = true
  74. viewBinding = true
  75. }
  76. buildTypes {
  77. getByName("release") {
  78. if (project.hasProperty("RELEASE_STORE_FILE")) {
  79. signingConfig = signingConfigs.getByName("myConfig")
  80. }
  81. manifestPlaceholders["app_name"] = "@string/app_name"
  82. isMinifyEnabled = true
  83. isShrinkResources = true
  84. proguardFiles(
  85. getDefaultProguardFile("proguard-android-optimize.txt"),
  86. "proguard-rules.pro",
  87. "cronet-proguard-rules.pro"
  88. )
  89. }
  90. getByName("debug") {
  91. applicationIdSuffix = ".debug"
  92. if (project.hasProperty("RELEASE_STORE_FILE")) {
  93. signingConfig = signingConfigs.getByName("myConfig")
  94. }
  95. manifestPlaceholders["app_name"] = "@string/app_name"
  96. versionNameSuffix = "_debug"
  97. isMinifyEnabled = false
  98. proguardFiles(
  99. getDefaultProguardFile("proguard-android-optimize.txt"),
  100. "proguard-rules.pro",
  101. "cronet-proguard-rules.pro"
  102. )
  103. }
  104. }
  105. splits {
  106. abi {
  107. isEnable = true
  108. reset()
  109. include("armeabi-v7a", "arm64-v8a")
  110. isUniversalApk = true
  111. }
  112. }
  113. flavorDimensions += "mode"
  114. productFlavors {
  115. create("app") {
  116. dimension = "mode"
  117. manifestPlaceholders["APP_CHANNEL_VALUE"] = "app"
  118. }
  119. }
  120. applicationVariants.all {
  121. val variant = this
  122. outputs.all {
  123. val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl
  124. val abi = output.getFilter(com.android.build.OutputFile.ABI)
  125. val flavor = variant.productFlavors[0].name
  126. val baseVersionName = variant.versionName
  127. var apkName = "${appName}_${flavor}_${baseVersionName}"
  128. if (abi != null) {
  129. apkName += "_$abi"
  130. }
  131. output.outputFileName = "$apkName.apk"
  132. }
  133. }
  134. room {
  135. schemaDirectory("$projectDir/schemas")
  136. }
  137. ksp {
  138. arg("room.incremental", "true")
  139. arg("room.expandProjection", "true")
  140. arg("room.generateKotlin", "false")
  141. }
  142. compileOptions {
  143. isCoreLibraryDesugaringEnabled = true
  144. sourceCompatibility = JavaVersion.VERSION_21
  145. targetCompatibility = JavaVersion.VERSION_21
  146. }
  147. packaging {
  148. resources.excludes.add("META-INF/*")
  149. }
  150. sourceSets {
  151. getByName("androidTest").assets.srcDirs("$projectDir/schemas")
  152. }
  153. lint {
  154. checkDependencies = true
  155. }
  156. }
  157. dependencies {
  158. coreLibraryDesugaring(libs.desugar)
  159. testImplementation(libs.junit)
  160. androidTestImplementation(libs.bundles.androidTest)
  161. implementation(libs.kotlin.stdlib)
  162. implementation(libs.kotlinx.serialization.json)
  163. implementation(libs.bundles.coroutines)
  164. implementation(libs.core.ktx)
  165. implementation(libs.appcompat.appcompat)
  166. implementation(libs.activity.ktx)
  167. implementation(libs.fragment.ktx)
  168. implementation(libs.preference.ktx)
  169. implementation(libs.androidx.constraintlayout)
  170. implementation(libs.androidx.swiperefreshlayout)
  171. implementation(libs.androidx.recyclerview)
  172. implementation(libs.androidx.viewpager2)
  173. implementation(libs.androidx.webkit)
  174. implementation(libs.material)
  175. implementation(libs.flexbox)
  176. implementation(libs.gson)
  177. implementation(libs.lifecycle.common.java8)
  178. implementation(libs.lifecycle.service)
  179. implementation(libs.media.media)
  180. implementation(libs.media3.exoplayer)
  181. implementation(libs.media3.datasource.okhttp)
  182. implementation(libs.splitties.appctx)
  183. implementation(libs.splitties.systemservices)
  184. implementation(libs.splitties.views)
  185. implementation(libs.room.runtime)
  186. implementation(libs.room.ktx)
  187. ksp(libs.room.compiler)
  188. androidTestImplementation(libs.room.testing)
  189. implementation(libs.liveeventbus)
  190. implementation(libs.jsoup)
  191. implementation(libs.json.path)
  192. implementation(libs.jsoupxpath)
  193. implementation(project(":modules:book"))
  194. implementation(project(":modules:rhino"))
  195. implementation(libs.okhttp)
  196. implementation(fileTree(mapOf("dir" to "cronetlib", "include" to listOf("*.jar", "*.aar"))))
  197. implementation(libs.protobuf.javalite)
  198. implementation(libs.glide.glide)
  199. implementation(libs.glide.okhttp)
  200. ksp(libs.glide.ksp)
  201. implementation(libs.androidsvg)
  202. implementation(libs.glide.svg)
  203. implementation(libs.glide.recyclerview)
  204. implementation(libs.nanohttpd.nanohttpd)
  205. implementation(libs.nanohttpd.websocket)
  206. implementation(libs.zxing.lite)
  207. implementation(libs.colorpicker)
  208. implementation(libs.libarchive)
  209. implementation(libs.commons.text)
  210. implementation(libs.markwon.core)
  211. implementation(libs.markwon.image.glide)
  212. implementation(libs.markwon.ext.tables)
  213. implementation(libs.markwon.html)
  214. implementation(libs.quick.chinese.transfer.core)
  215. implementation(libs.hutool.crypto)
  216. implementation(platform(libs.firebase.bom))
  217. implementation(libs.firebase.analytics)
  218. implementation(libs.firebase.perf)
  219. implementation(libs.androidx.datastore.preferences)
  220. implementation(libs.androidx.palette)
  221. implementation(libs.androidx.core.splashscreen)
  222. implementation(libs.androidx.startup.runtime)
  223. implementation(platform(libs.androidx.compose.bom))
  224. implementation(libs.activity.compose)
  225. implementation(libs.androidx.compose.ui)
  226. implementation(libs.androidx.compose.ui.tooling.preview)
  227. debugImplementation(libs.androidx.compose.ui.tooling)
  228. implementation(libs.androidx.compose.material3)
  229. implementation(libs.androidx.lifecycle.runtime.compose)
  230. implementation(libs.coil.compose)
  231. implementation(libs.accompanist.webview)
  232. implementation(libs.kotlinx.coroutines.android)
  233. implementation(libs.androidx.lifecycle.viewmodel.compose)
  234. implementation(libs.androidx.compose.animation)
  235. implementation(libs.androidx.compose.foundation)
  236. implementation(libs.androidx.constraintlayout.compose)
  237. implementation(libs.androidx.compose.ui.viewbinding)
  238. implementation(libs.androidx.navigation3.runtime)
  239. implementation(libs.androidx.navigation3.ui)
  240. implementation(libs.androidx.compose.adaptive)
  241. implementation(libs.androidx.compose.adaptive.layout)
  242. implementation(libs.androidx.compose.adaptive.navigation)
  243. implementation(libs.androidx.navigation.compose)
  244. implementation(libs.androidx.compose.material)
  245. implementation(libs.compose.materialIcons)
  246. implementation(platform(libs.koin.bom))
  247. implementation(libs.koin.core)
  248. implementation(libs.koin.android)
  249. implementation(libs.koin.compose)
  250. implementation(libs.koin.compose.viewmodel)
  251. implementation(libs.reorderable)
  252. implementation(libs.material.kolor)
  253. implementation(libs.haze.core)
  254. implementation(libs.haze.materials)
  255. }