build.gradle.kts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. @file:Suppress("UNUSED_VARIABLE")
  2. import com.android.build.gradle.BaseExtension
  3. import com.github.benmanes.gradle.versions.VersionsPlugin
  4. import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
  5. import java.net.URL
  6. import java.util.*
  7. buildscript {
  8. repositories {
  9. gradlePluginPortal()
  10. mavenCentral()
  11. google()
  12. maven("https://maven.kr328.app/releases")
  13. }
  14. dependencies {
  15. classpath(deps.build.update)
  16. classpath(deps.build.android)
  17. classpath(deps.build.kotlin.common)
  18. classpath(deps.build.kotlin.serialization)
  19. classpath(deps.build.ksp)
  20. classpath(deps.build.golang)
  21. }
  22. }
  23. allprojects {
  24. apply {
  25. plugin(VersionsPlugin::class)
  26. }
  27. tasks.withType(DependencyUpdatesTask::class) {
  28. val rejectPattern = Regex("(beta|alpha)", RegexOption.IGNORE_CASE)
  29. rejectVersionIf {
  30. candidate.version.contains(rejectPattern)
  31. }
  32. }
  33. repositories {
  34. mavenCentral()
  35. google()
  36. maven("https://maven.kr328.app/releases")
  37. }
  38. }
  39. subprojects {
  40. val isApp = name == "app"
  41. apply(plugin = if (isApp) "com.android.application" else "com.android.library")
  42. extensions.configure(BaseExtension::class) {
  43. val minSdkVersion = 21
  44. val targetSdkVersion = 30
  45. val buildVersionCode = 204009
  46. val buildVersionName = "2.4.9"
  47. val defaultDimension = "feature"
  48. ndkVersion = "23.0.7599858"
  49. compileSdkVersion(targetSdkVersion)
  50. defaultConfig {
  51. if (isApp) {
  52. applicationId = "com.github.kr328.clash"
  53. }
  54. minSdk = minSdkVersion
  55. targetSdk = targetSdkVersion
  56. versionName = buildVersionName
  57. versionCode = buildVersionCode
  58. if (!isApp) {
  59. consumerProguardFiles("consumer-rules.pro")
  60. }
  61. resValue("string", "release_name", "v$buildVersionName")
  62. resValue("integer", "release_code", "$buildVersionCode")
  63. externalNativeBuild {
  64. cmake {
  65. abiFilters("arm64-v8a", "armeabi-v7a", "x86", "x86_64")
  66. }
  67. }
  68. }
  69. if (isApp) {
  70. packagingOptions {
  71. excludes.add("DebugProbesKt.bin")
  72. }
  73. }
  74. buildTypes {
  75. named("release") {
  76. isMinifyEnabled = isApp
  77. isShrinkResources = isApp
  78. proguardFiles(
  79. getDefaultProguardFile("proguard-android-optimize.txt"),
  80. "proguard-rules.pro"
  81. )
  82. }
  83. }
  84. productFlavors {
  85. flavorDimensions(defaultDimension)
  86. create("foss") {
  87. dimension = defaultDimension
  88. versionNameSuffix = ".foss"
  89. if (isApp) {
  90. applicationIdSuffix = ".foss"
  91. }
  92. }
  93. create("premium") {
  94. dimension = defaultDimension
  95. versionNameSuffix = ".premium"
  96. val trackFile = rootProject.file("track.properties")
  97. if (trackFile.exists()) {
  98. val track = Properties().apply {
  99. trackFile.inputStream().use(this::load)
  100. }
  101. buildConfigField("String", "APP_CENTER_KEY", "\"${track.getProperty("appcenter.key")!!}\"")
  102. } else {
  103. buildConfigField("String", "APP_CENTER_KEY", "null")
  104. }
  105. }
  106. }
  107. buildFeatures.apply {
  108. dataBinding {
  109. isEnabled = name != "hideapi"
  110. }
  111. }
  112. if (isApp) {
  113. splits {
  114. abi {
  115. isEnable = true
  116. isUniversalApk = true
  117. }
  118. }
  119. }
  120. }
  121. }
  122. task("clean", type = Delete::class) {
  123. delete(rootProject.buildDir)
  124. }
  125. tasks.named<Wrapper>("wrapper") {
  126. distributionType = Wrapper.DistributionType.ALL
  127. doLast {
  128. val sha256 = URL("$distributionUrl.sha256").openStream()
  129. .use { it.reader().readText().trim() }
  130. file("gradle/wrapper/gradle-wrapper.properties")
  131. .appendText("distributionSha256Sum=$sha256")
  132. }
  133. }