123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import com.android.build.gradle.internal.api.BaseVariantOutputImpl
- import java.text.SimpleDateFormat
- import java.util.Date
- import java.util.Properties
- fun getVersionCode(): Int {
- val dateFormat = SimpleDateFormat("yyyyMMdd")
- val versionCodeStr = dateFormat.format(Date())
- return versionCodeStr.toInt()
- }
- plugins {
- alias(libs.plugins.android.application)
- alias(libs.plugins.kotlin.android)
- alias(libs.plugins.kotlin.compose)
- alias(libs.plugins.kotlin.serialization)
- }
- // 读取 gradle.properties 并解析 project.xx 字段
- fun buildTypeChain(): Map<String, List<String>> {
- val properties = Properties()
- val file = File(rootDir, "gradle.properties")
- if (file.exists()) {
- properties.load(file.inputStream())
- }
- // 只取 project.xx 字段
- val projectMap = properties.entries
- .filter { (k, _) -> k.toString().startsWith("project.") }
- .associate { (k, v) -> k.toString().removePrefix("project.") to v.toString() }
- // 递归查找链
- fun resolveChain(key: String): List<String> {
- val next = projectMap[key]
- return if (next == null || next == "debug" || next == "release") {
- listOfNotNull(key, next)
- } else {
- listOf(key) + resolveChain(next)
- }
- }
- // 构建所有链并返回
- return projectMap.keys.associateWith { resolveChain(it) }
- }
- val buildTypeChain = buildTypeChain()
- android {
- namespace = "com.hzliuzhi.applet.container"
- compileSdk = 35
- defaultConfig {
- applicationId = "com.hzliuzhi.applet.container"
- minSdk = 26
- targetSdk = 35
- versionCode = getVersionCode()
- versionName = "2.2.1"
- testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
- }
- buildTypes {
- release {
- isMinifyEnabled = false
- proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
- }
- buildTypeChain.values.sortedBy { it.size }.forEach { chain ->
- when (val name = chain.first()) {
- "debug",
- "release",
- -> return@forEach
- else -> create(name) {
- // initWith 取 chain 的下一个(即父级)
- initWith(getByName(chain.getOrNull(1) ?: "debug"))
- // matchingFallbacks 取除自己外的所有
- matchingFallbacks += chain.drop(1)
- }
- }
- }
- }
- sourceSets {
- buildTypeChain.forEach { (name, chain) ->
- maybeCreate(name).apply {
- // 不包含 main,只合并链上的自定义类型
- val dirs = chain.reversed()
- dirs.forEach { dir ->
- assets.srcDir("src/$dir/assets")
- }
- }
- }
- }
- androidResources {
- noCompress.add("apk")
- }
- applicationVariants.all {
- outputs.all {
- val appName = "six" // 你的自定义名称
- val buildType = buildType.name
- val versionName = versionName
- val versionCode = versionCode
- val fileName = "${appName}.${buildType}-${versionName}-${versionCode}.apk"
- (this as BaseVariantOutputImpl).apply {
- outputFileName = fileName
- }
- }
- }
- compileOptions {
- sourceCompatibility = JavaVersion.VERSION_11
- targetCompatibility = JavaVersion.VERSION_11
- }
- kotlinOptions {
- jvmTarget = "11"
- }
- buildFeatures {
- compose = true
- }
- }
- dependencies {
- implementation(libs.androidx.core.ktx)
- implementation(libs.androidx.lifecycle.runtime.ktx)
- implementation(libs.androidx.activity.compose)
- implementation(libs.androidx.navigation.compose)
- implementation(libs.serialization.json)
- implementation(platform(libs.androidx.compose.bom))
- implementation(libs.androidx.ui)
- implementation(libs.androidx.ui.graphics)
- implementation(libs.androidx.ui.tooling.preview)
- implementation(libs.androidx.material3)
- testImplementation(libs.junit)
- androidTestImplementation(libs.androidx.junit)
- androidTestImplementation(libs.androidx.espresso.core)
- androidTestImplementation(platform(libs.androidx.compose.bom))
- androidTestImplementation(libs.androidx.ui.test.junit4)
- debugImplementation(libs.androidx.ui.tooling)
- debugImplementation(libs.androidx.ui.test.manifest)
- implementation(project(":core"))
- implementation(project(":library:browser"))
- implementation(project(":library:device:pulse"))
- implementation(project(":library:device:printer"))
- implementation(project(":library:device:scanner"))
- implementation(libs.gson)
- }
|