build.gradle.kts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import com.android.build.gradle.internal.api.BaseVariantOutputImpl
  2. import java.text.SimpleDateFormat
  3. import java.util.Date
  4. import java.util.Properties
  5. fun getVersionCode(): Int {
  6. val dateFormat = SimpleDateFormat("yyyyMMdd")
  7. val versionCodeStr = dateFormat.format(Date())
  8. return versionCodeStr.toInt()
  9. }
  10. plugins {
  11. alias(libs.plugins.android.application)
  12. alias(libs.plugins.kotlin.android)
  13. alias(libs.plugins.kotlin.compose)
  14. alias(libs.plugins.kotlin.serialization)
  15. }
  16. // 读取 gradle.properties 并解析 project.xx 字段
  17. fun buildTypeChain(): Map<String, List<String>> {
  18. val properties = Properties()
  19. val file = File(rootDir, "gradle.properties")
  20. if (file.exists()) {
  21. properties.load(file.inputStream())
  22. }
  23. // 只取 project.xx 字段
  24. val projectMap = properties.entries
  25. .filter { (k, _) -> k.toString().startsWith("project.") }
  26. .associate { (k, v) -> k.toString().removePrefix("project.") to v.toString() }
  27. // 递归查找链
  28. fun resolveChain(key: String): List<String> {
  29. val next = projectMap[key]
  30. return if (next == null || next == "debug" || next == "release") {
  31. listOfNotNull(key, next)
  32. } else {
  33. listOf(key) + resolveChain(next)
  34. }
  35. }
  36. // 构建所有链并返回
  37. return projectMap.keys.associateWith { resolveChain(it) }
  38. }
  39. val buildTypeChain = buildTypeChain()
  40. android {
  41. namespace = "com.hzliuzhi.applet.container"
  42. compileSdk = 35
  43. defaultConfig {
  44. applicationId = "com.hzliuzhi.applet.container"
  45. minSdk = 26
  46. targetSdk = 35
  47. versionCode = getVersionCode()
  48. versionName = "2.2.1"
  49. testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  50. }
  51. buildTypes {
  52. release {
  53. isMinifyEnabled = false
  54. proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
  55. }
  56. buildTypeChain.values.sortedBy { it.size }.forEach { chain ->
  57. when (val name = chain.first()) {
  58. "debug",
  59. "release",
  60. -> return@forEach
  61. else -> create(name) {
  62. // initWith 取 chain 的下一个(即父级)
  63. initWith(getByName(chain.getOrNull(1) ?: "debug"))
  64. // matchingFallbacks 取除自己外的所有
  65. matchingFallbacks += chain.drop(1)
  66. }
  67. }
  68. }
  69. }
  70. sourceSets {
  71. buildTypeChain.forEach { (name, chain) ->
  72. maybeCreate(name).apply {
  73. // 不包含 main,只合并链上的自定义类型
  74. val dirs = chain.reversed()
  75. dirs.forEach { dir ->
  76. assets.srcDir("src/$dir/assets")
  77. }
  78. }
  79. }
  80. }
  81. androidResources {
  82. noCompress.add("apk")
  83. }
  84. applicationVariants.all {
  85. outputs.all {
  86. val appName = "six" // 你的自定义名称
  87. val buildType = buildType.name
  88. val versionName = versionName
  89. val versionCode = versionCode
  90. val fileName = "${appName}.${buildType}-${versionName}-${versionCode}.apk"
  91. (this as BaseVariantOutputImpl).apply {
  92. outputFileName = fileName
  93. }
  94. }
  95. }
  96. compileOptions {
  97. sourceCompatibility = JavaVersion.VERSION_11
  98. targetCompatibility = JavaVersion.VERSION_11
  99. }
  100. kotlinOptions {
  101. jvmTarget = "11"
  102. }
  103. buildFeatures {
  104. compose = true
  105. }
  106. }
  107. dependencies {
  108. implementation(libs.androidx.core.ktx)
  109. implementation(libs.androidx.lifecycle.runtime.ktx)
  110. implementation(libs.androidx.activity.compose)
  111. implementation(libs.androidx.navigation.compose)
  112. implementation(libs.serialization.json)
  113. implementation(platform(libs.androidx.compose.bom))
  114. implementation(libs.androidx.ui)
  115. implementation(libs.androidx.ui.graphics)
  116. implementation(libs.androidx.ui.tooling.preview)
  117. implementation(libs.androidx.material3)
  118. testImplementation(libs.junit)
  119. androidTestImplementation(libs.androidx.junit)
  120. androidTestImplementation(libs.androidx.espresso.core)
  121. androidTestImplementation(platform(libs.androidx.compose.bom))
  122. androidTestImplementation(libs.androidx.ui.test.junit4)
  123. debugImplementation(libs.androidx.ui.tooling)
  124. debugImplementation(libs.androidx.ui.test.manifest)
  125. implementation(project(":core"))
  126. implementation(project(":library:browser"))
  127. implementation(project(":library:device:pulse"))
  128. implementation(project(":library:device:printer"))
  129. implementation(project(":library:device:scanner"))
  130. implementation(libs.gson)
  131. }