plugins { alias(libs.plugins.android.application) } // ========================================================================= // 核心版號與自動連動定義 // 每次發佈新版本給機台時,只需遞增 verPatch (修補版號)。 // 螢幕尺寸 (verMajor) 已改為下方依據編譯 Flavor (S12XYU / S9XYU) 自動動態判定, // 避免不同尺寸機台間版本號產生衝突。 // ========================================================================= def verMinor = 1 def verPatch = 34 android { namespace 'com.unibuy.smartdevice' compileSdk 35 defaultConfig { applicationId "com.unibuy.smartdevice" minSdk 21 targetSdk 34 // 預設以 10 吋進行基礎 Sync 估算,實際打包會由下方 applicationVariants 動態覆寫 versionCode 10 * 10000 + verMinor * 100 + verPatch versionName "10_0${verMinor}_${verPatch}_R" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } // ===================================================================== // 雙維度 Flavor:project(客戶專案)× hardware(硬體規格) // ===================================================================== flavorDimensions "project", "hardware" productFlavors { General { dimension "project" } Chengwai { dimension "project" } Cmuh { dimension "project" } S12XYU { dimension "hardware" } S9XYU { dimension "hardware" minSdk 28 } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.debug } } // 自定義打包檔案名稱與動態版本號計算 // 遵循公司命名規範:來源_安卓號_主板號_機器系列_專案名稱_螢幕大小_次版號_修補版號_環境 applicationVariants.all { variant -> def project = variant.productFlavors[0].name // project dimension def hardware = variant.productFlavors[1].name // hardware dimension def buildType = variant.buildType.name // 根據硬體規格自動動態判定螢幕吋數 (verMajor) 與版號 def verMajor = 10 def calculatedMinor = verMinor // 預設套用全域次版號 def calculatedPatch = verPatch // 預設套用全域修補版號 if (hardware == "S9XYU") { verMajor = 21 // 21.5 吋 // 【預留擴充】若中國醫安卓 9 機台未來需要獨立的發版節奏,可直接在此單獨覆寫: // calculatedMinor = 1 // calculatedPatch = 6 } else if (hardware == "S12XYU") { verMajor = 10 // 10 吋 } // 動態重算並覆寫此 Variant 的版本號,避免互相污染 def calculatedVersionCode = verMajor * 10000 + calculatedMinor * 100 + calculatedPatch def calculatedVersionName = "${verMajor}_0${calculatedMinor}_${calculatedPatch}_R" variant.outputs.each { output -> output.versionCodeOverride = calculatedVersionCode output.versionNameOverride = calculatedVersionName // 將 hardware flavor 名稱展開為公司規範格式 S12XYU → S_12_XY_U def hwFormatted = hardware .replaceAll(/^([A-Z])(\d+)([A-Z]+)([A-Z])$/, '$1_$2_$3_$4') // 輸出範例:app-S_12_XY_U_Chengwai-10_08_8_R-release.apk output.outputFileName = "app-${hwFormatted}_${project}-${calculatedVersionName}-${buildType}.apk" } } compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } buildFeatures { viewBinding true buildConfig true } packaging { resources { excludes += ['META-INF/INDEX.LIST', 'META-INF/io.netty.versions.properties'] } } } dependencies { implementation libs.appcompat implementation libs.material implementation libs.activity implementation libs.constraintlayout implementation libs.work.runtime testImplementation libs.junit androidTestImplementation libs.ext.junit androidTestImplementation libs.espresso.core annotationProcessor libs.compiler implementation libs.usb.serial.for.android implementation libs.android.serialport implementation libs.glide implementation libs.media3.exoplayer implementation libs.media3.ui implementation libs.tsnackBar implementation 'com.blankj:utilcodex:1.31.1' implementation 'com.hivemq:hivemq-mqtt-client:1.3.3' implementation 'io.netty:netty-codec-http:4.1.94.Final' implementation 'io.netty:netty-handler:4.1.94.Final' implementation 'com.google.code.gson:gson:2.10.1' }