build.gradle 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. plugins {
  2. // id "com.android.application"
  3. // id 'org.jetbrains.kotlin.android'
  4. // id 'kotlin-parcelize'
  5. // //id 'kotlin-kapt'
  6. // id 'com.google.devtools.ksp'
  7. // id "com.google.gms.google-services"
  8. alias libs.plugins.compose.compiler
  9. alias libs.plugins.android.application
  10. alias libs.plugins.kotlin.android
  11. alias libs.plugins.kotlin.parcelize
  12. alias libs.plugins.room
  13. alias libs.plugins.ksp
  14. alias libs.plugins.google.services
  15. }
  16. apply from: 'download.gradle'
  17. def versionPropsFile = file("version.properties")
  18. def versionProps = new Properties()
  19. versionProps.load(new FileInputStream(versionPropsFile))
  20. ext {
  21. versionMajor = versionProps['VERSION_MAJOR'].toInteger()
  22. versionMinor = versionProps['VERSION_MINOR'].toInteger()
  23. versionPatch = versionProps['VERSION_PATCH'].toInteger()
  24. }
  25. def name = "legado"
  26. def gitCommits = Integer.parseInt('git rev-list HEAD --count'.execute().text.trim())
  27. ext.versionBuild = gitCommits
  28. ext.versionName = "${ext.versionMajor}.${ext.versionMinor}.${ext.versionPatch}"
  29. def getGitCommitHash() {
  30. try {
  31. def stdout = new ByteArrayOutputStream()
  32. ExecOperations.exec {
  33. commandLine 'git', 'rev-parse', '--short', 'HEAD'
  34. standardOutput = stdout
  35. }
  36. return stdout.toString().trim()
  37. } catch (Exception ignored) {
  38. return "unknown"
  39. }
  40. }
  41. android {
  42. compileSdk = compile_sdk_version
  43. namespace = "io.legado.app"
  44. buildFeatures {
  45. compose = true
  46. }
  47. kotlin {
  48. jvmToolchain {
  49. languageVersion.set(JavaLanguageVersion.of(21))
  50. vendor.set(JvmVendorSpec.ADOPTIUM)
  51. }
  52. }
  53. signingConfigs {
  54. if (project.hasProperty("RELEASE_STORE_FILE")) {
  55. myConfig {
  56. storeFile file(RELEASE_STORE_FILE)
  57. storePassword RELEASE_STORE_PASSWORD
  58. keyAlias RELEASE_KEY_ALIAS
  59. keyPassword RELEASE_KEY_PASSWORD
  60. v1SigningEnabled true
  61. v2SigningEnabled true
  62. enableV3Signing = true
  63. enableV4Signing = true
  64. }
  65. }
  66. }
  67. defaultConfig {
  68. applicationId "io.legato.kazusa"
  69. minSdk 26
  70. targetSdk 36
  71. versionCode 10000 + gitCommits
  72. versionName project.ext.versionName
  73. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  74. project.ext.set("archivesBaseName", name + "_" + versionName)
  75. buildConfigField "String", "Cronet_Version", "\"$CronetVersion\""
  76. buildConfigField "String", "Cronet_Main_Version", "\"$CronetMainVersion\""
  77. javaCompileOptions {
  78. annotationProcessorOptions {
  79. arguments += [
  80. "room.incremental" : "true",
  81. "room.expandProjection": "true",
  82. "room.schemaLocation" : "$projectDir/schemas".toString()
  83. ]
  84. }
  85. }
  86. def buildTime = new Date().format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("UTC"))
  87. buildConfigField "String", "BUILD_TIME", "\"${buildTime}\""
  88. }
  89. buildFeatures {
  90. buildConfig = true
  91. viewBinding = true
  92. }
  93. buildTypes {
  94. release {
  95. if (project.hasProperty("RELEASE_STORE_FILE")) {
  96. signingConfig signingConfigs.myConfig
  97. }
  98. //applicationIdSuffix '.release'
  99. manifestPlaceholders.put("app_name", "@string/app_name")
  100. minifyEnabled = true
  101. shrinkResources = true
  102. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'cronet-proguard-rules.pro'
  103. }
  104. debug {
  105. applicationIdSuffix ".debug"
  106. if (project.hasProperty("RELEASE_STORE_FILE")) {
  107. signingConfig signingConfigs.myConfig
  108. }
  109. manifestPlaceholders.put("app_name", "@string/app_name")
  110. //applicationIdSuffix '.debug'
  111. versionNameSuffix "_debug+${getGitCommitHash()}"
  112. minifyEnabled false
  113. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'cronet-proguard-rules.pro'
  114. }
  115. }
  116. splits {
  117. abi {
  118. enable = true
  119. reset()
  120. //noinspection ChromeOsAbiSupport
  121. include 'armeabi-v7a', 'arm64-v8a'
  122. universalApk = true
  123. }
  124. }
  125. //noinspection GrDeprecatedAPIUsage
  126. flavorDimensions = ['mode']
  127. productFlavors {
  128. app {
  129. dimension "mode"
  130. manifestPlaceholders.put("APP_CHANNEL_VALUE", "app")
  131. }
  132. }
  133. android.applicationVariants.configureEach { variant ->
  134. variant.outputs.configureEach { output ->
  135. def abi = output.getFilter(com.android.build.OutputFile.ABI)
  136. def flavor = variant.productFlavors[0].name
  137. def baseVersionName = variant.versionName
  138. def apkName = "${name}_${flavor}_${baseVersionName}"
  139. if (abi != null) {
  140. apkName += "_${abi}"
  141. }
  142. apkName += ".apk"
  143. output.outputFileName = apkName
  144. }
  145. }
  146. room {
  147. schemaDirectory "$projectDir/schemas"
  148. }
  149. // 设定Room的KSP参数
  150. ksp {
  151. arg("room.incremental", "true")
  152. arg("room.expandProjection", "true")
  153. arg("room.generateKotlin", "false")
  154. //arg("room.schemaLocation", "$projectDir/schemas")
  155. }
  156. compileOptions {
  157. // Flag to enable support for the new language APIs
  158. coreLibraryDesugaringEnabled = true
  159. // Sets Java compatibility
  160. sourceCompatibility JavaVersion.VERSION_21
  161. targetCompatibility JavaVersion.VERSION_21
  162. }
  163. packaging {
  164. resources.excludes.add('META-INF/*')
  165. }
  166. sourceSets {
  167. // Adds exported schema location as test app assets.
  168. androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
  169. }
  170. lint {
  171. checkDependencies = true
  172. }
  173. tasks.withType(JavaCompile).tap {
  174. configureEach {
  175. //options.compilerArgs << "-Xlint:unchecked"
  176. }
  177. }
  178. }
  179. dependencies {
  180. //compileOnly "com.android.tools.build:gradle:$agp_version"
  181. //noinspection GradleDependency,GradlePackageUpdate
  182. //coreLibraryDesugaring('com.android.tools:desugar_jdk_libs_nio:2.0.4')
  183. coreLibraryDesugaring(libs.desugar)
  184. testImplementation(libs.junit)
  185. androidTestImplementation(libs.bundles.androidTest)
  186. //kotlin
  187. //noinspection GradleDependency,DifferentStdlibGradleVersion
  188. implementation(libs.kotlin.stdlib)
  189. //Kotlin反射
  190. //noinspection GradleDependency,DifferentStdlibGradleVersion
  191. //implementation(libs.kotlin.reflect)
  192. //协程
  193. //def coroutines_version = '1.7.3'
  194. implementation(libs.bundles.coroutines)
  195. //androidX
  196. implementation(libs.core.ktx)
  197. implementation(libs.appcompat.appcompat)
  198. implementation(libs.activity.ktx)
  199. implementation(libs.fragment.ktx)
  200. implementation(libs.preference.ktx)
  201. implementation(libs.androidx.constraintlayout)
  202. implementation(libs.androidx.swiperefreshlayout)
  203. implementation(libs.androidx.recyclerview)
  204. implementation(libs.androidx.viewpager2)
  205. implementation(libs.androidx.webkit)
  206. //google
  207. implementation(libs.material)
  208. implementation(libs.flexbox)
  209. implementation(libs.gson)
  210. //lifecycle
  211. implementation(libs.lifecycle.common.java8)
  212. implementation(libs.lifecycle.service)
  213. //media
  214. implementation(libs.media.media)
  215. // For media playback using ExoPlayer
  216. implementation(libs.media3.exoplayer)
  217. // For loading data using the OkHttp network stack
  218. implementation(libs.media3.datasource.okhttp)
  219. // For exposing and controlling media sessions
  220. //implementation "androidx.media3:media3-session:$media3_version"
  221. //Splitties
  222. implementation(libs.splitties.appctx)
  223. implementation(libs.splitties.systemservices)
  224. implementation(libs.splitties.views)
  225. //room sql语句不高亮解决方法https://issuetracker.google.com/issues/234612964#comment6
  226. implementation(libs.room.runtime)
  227. implementation(libs.room.ktx)
  228. //kapt("androidx.room:room-compiler:$room_version")
  229. ksp(libs.room.compiler)
  230. androidTestImplementation(libs.room.testing)
  231. //liveEventBus
  232. implementation(libs.liveeventbus)
  233. //规则相关
  234. implementation(libs.jsoup)
  235. implementation(libs.json.path)
  236. implementation(libs.jsoupxpath)
  237. implementation(project(path: ':modules:book'))
  238. implementation(project(path: ':modules:rhino'))
  239. //JS rhino
  240. //网络
  241. implementation(libs.okhttp)
  242. implementation(fileTree(dir: 'cronetlib', include: ['*.jar', '*.aar']))
  243. implementation(libs.protobuf.javalite)
  244. //Glide
  245. implementation(libs.glide.glide)
  246. implementation(libs.glide.okhttp)
  247. ksp(libs.glide.ksp)
  248. //Svg
  249. implementation(libs.androidsvg)
  250. //Glide svg plugin
  251. implementation(libs.glide.svg)
  252. //webServer
  253. implementation(libs.nanohttpd.nanohttpd)
  254. implementation(libs.nanohttpd.websocket)
  255. //二维码
  256. //noinspection GradleDependency
  257. implementation(libs.zxing.lite)
  258. //颜色选择
  259. implementation(libs.colorpicker)
  260. //压缩解压
  261. implementation libs.libarchive
  262. //apache
  263. implementation(libs.commons.text)
  264. //MarkDown
  265. implementation(libs.markwon.core)
  266. implementation(libs.markwon.image.glide)
  267. implementation(libs.markwon.ext.tables)
  268. implementation(libs.markwon.html)
  269. //转换繁体
  270. implementation(libs.quick.chinese.transfer.core)
  271. //加解密类库,有些书源使用
  272. //noinspection GradleDependency,GradlePackageUpdate
  273. implementation(libs.hutool.crypto)
  274. //firebase, 崩溃统计和性能统计
  275. implementation platform(libs.firebase.bom)
  276. implementation libs.firebase.analytics
  277. implementation libs.firebase.perf
  278. implementation libs.glide.recyclerview
  279. //LeakCanary, 内存泄露检测
  280. //debugImplementation('com.squareup.leakcanary:leakcanary-android:2.7')
  281. //com.github.AmrDeveloper:CodeView代码编辑已集成到应用内
  282. //epubLib集成到应用内
  283. implementation libs.androidx.datastore.preferences
  284. implementation libs.androidx.palette
  285. implementation libs.androidx.core.splashscreen
  286. implementation libs.androidx.startup.runtime
  287. // Compose 基础
  288. implementation platform(libs.androidx.compose.bom)
  289. implementation libs.activity.compose
  290. implementation libs.androidx.compose.ui
  291. implementation libs.androidx.compose.ui.tooling.preview
  292. debugImplementation libs.androidx.compose.ui.tooling
  293. // Material3
  294. implementation libs.androidx.compose.material3
  295. // Lifecycle
  296. implementation libs.androidx.lifecycle.runtime.compose
  297. // Activity
  298. implementation libs.androidx.activity.compose
  299. // Coil
  300. implementation libs.coil.compose
  301. // accompanist – WebView(打开网页)
  302. implementation libs.accompanist.webview
  303. // Markdown 渲染(Compose MD)
  304. // implementation libs.markdown.compose
  305. // 协程
  306. implementation libs.kotlinx.coroutines.android
  307. implementation libs.androidx.lifecycle.runtime.compose
  308. implementation libs.androidx.lifecycle.viewmodel.compose
  309. implementation libs.androidx.compose.animation
  310. implementation libs.androidx.compose.foundation
  311. implementation libs.androidx.constraintlayout.compose
  312. implementation libs.androidx.compose.ui.viewbinding
  313. implementation libs.androidx.navigation.compose
  314. implementation libs.androidx.compose.material
  315. implementation libs.compose.materialIcons
  316. implementation(platform(libs.koin.bom))
  317. implementation(libs.koin.core)
  318. implementation(libs.koin.android)
  319. implementation(libs.koin.compose)
  320. implementation(libs.koin.compose.viewmodel)
  321. }