11// file:noinspection DependencyNotationArgument
2- import com.android.build.gradle.internal. api.BaseVariantOutputImpl
2+ import com.android.build.api.dsl.ApplicationBuildType
33import com.android.build.gradle.tasks.PackageAndroidArtifact
44import java.text.SimpleDateFormat
55import java.time.LocalDateTime
@@ -13,57 +13,30 @@ plugins {
1313}
1414
1515val apkId = " HyperCeiler"
16-
17- fun runGitCommand (vararg args : String ): String? {
18- return try {
19- val process = ProcessBuilder (listOf (" git" ) + args)
20- .redirectErrorStream(true )
21- .start()
22- val output = process.inputStream.bufferedReader().use { it.readText() }.trim()
23- val exit = process.waitFor()
24- if (exit == 0 && output.isNotBlank()) output else null
25- } catch (_: Throwable ) {
26- null
27- }
28- }
29-
30- fun getGitCommitCount (): Int {
31- val out = runGitCommand(" rev-list" , " --count" , " HEAD" )
32- return out ?.trim()?.toIntOrNull() ? : 0
33- }
34-
35- fun getGitHash (): String {
36- return runGitCommand(" rev-parse" , " --short" , " HEAD" ) ? : " unknown"
37- }
38-
39- fun getGitHashLong (): String {
40- return runGitCommand(" rev-parse" , " HEAD" ) ? : " unknown"
41- }
42-
43- fun getGitUrl (): String {
44- return runGitCommand(" remote" , " get-url" , " origin" ) ? : " unknown"
45- }
46-
47- fun getGitCurrentBranch (): String {
48- return runGitCommand(" branch" , " --show-current" ) ? : " unknown"
49- }
50-
51- val gitBranch = """ github\.com[:/](.+?)(\.git)?$""" .toRegex().find(getGitUrl())?.groupValues?.get(1 ) + " /" + getGitCurrentBranch()
52-
53- val getVersionCode: () -> Int = {
54- val commitCount = getGitCommitCount()
55- val major = 5
56- major + commitCount
16+ val gitHash: String by lazy { runGitCommand(" rev-parse" , " --short" , " HEAD" ) ? : " unknown" }
17+ val gitHashLong: String by lazy { runGitCommand(" rev-parse" , " HEAD" ) ? : " unknown" }
18+ val gitCommitCount: Int by lazy { runGitCommand(" rev-list" , " --count" , " HEAD" )?.toIntOrNull() ? : 0 }
19+ val gitBranch: String by lazy {
20+ val url = runGitCommand(" remote" , " get-url" , " origin" ) ? : " unknown"
21+ val branch = runGitCommand(" branch" , " --show-current" ) ? : " unknown"
22+ """ github\.com[:/](.+?)(\.git)?$""" .toRegex().find(url)?.groupValues?.get(1 ).orEmpty() + " /" + branch
5723}
24+ val gitVersionCode: Int by lazy { 5 + gitCommitCount }
25+
26+ fun runGitCommand (vararg args : String ): String? = runCatching {
27+ ProcessBuilder (listOf (" git" ) + args)
28+ .redirectErrorStream(true )
29+ .start()
30+ .let { process ->
31+ val output = process.inputStream.bufferedReader().readText().trim()
32+ if (process.waitFor() == 0 && output.isNotBlank()) output else null
33+ }
34+ }.getOrNull()
5835
59- fun loadPropertiesFromFile (fileName : String ): Properties ? {
60- val propertiesFile = rootProject.file(fileName)
61- return if (propertiesFile.exists()) {
62- val properties = Properties ()
63- properties.load(propertiesFile.inputStream())
64- properties
65- } else null
66- }
36+ fun loadPropertiesFromFile (fileName : String ): Properties ? =
37+ rootProject.file(fileName).takeIf { it.exists() }?.let { file ->
38+ Properties ().apply { load(file.inputStream()) }
39+ }
6740
6841android {
6942 namespace = " com.sevtinge.hyperceiler"
@@ -75,26 +48,24 @@ android {
7548 applicationId = namespace
7649 minSdk = 35
7750 targetSdk = 36
78- versionCode = getVersionCode()
51+ versionCode = gitVersionCode
7952 versionName = " 2.6.164"
8053
81- val sdf = SimpleDateFormat (" yyyy-MM-dd HH:mm:ss" ).apply {
54+ val buildTime = SimpleDateFormat (" yyyy-MM-dd HH:mm:ss" ).apply {
8255 timeZone = TimeZone .getTimeZone(" Asia/Shanghai" )
56+ }.format(Date ())
57+
58+ val buildConfigData = mapOf (
59+ " BUILD_TIME" to buildTime,
60+ " BUILD_OS_NAME" to System .getProperty(" os.name" ),
61+ " BUILD_USER_NAME" to System .getProperty(" user.name" ),
62+ " BUILD_JAVA_VERSION" to System .getProperty(" java.version" ),
63+ " GIT_BRANCH" to gitBranch
64+ )
65+
66+ for ((key, value) in buildConfigData) {
67+ buildConfigField(" String" , key, " \" $value \" " )
8368 }
84- val buildTime = sdf.format(Date ())
85- val osName = System .getProperty(" os.name" )
86- // val osArch = System.getProperty("os.arch")
87- val userName = System .getProperty(" user.name" )
88- val javaVersion = System .getProperty(" java.version" )
89- // val javaVendor = System.getProperty("java.vendor") + " (" + System.getProperty("java.vendor.url") + ")"
90-
91- buildConfigField(" String" , " BUILD_TIME" , " \" $buildTime \" " )
92- buildConfigField(" String" , " BUILD_OS_NAME" , " \" $osName \" " )
93- // buildConfigField("String", "BUILD_OS_ARCH", "\"$osArch\"")
94- buildConfigField(" String" , " BUILD_USER_NAME" , " \" $userName \" " )
95- buildConfigField(" String" , " BUILD_JAVA_VERSION" , " \" $javaVersion \" " )
96- // buildConfigField("String", "BUILD_JAVA_VENDOR", "\"$javaVendor\"")
97- buildConfigField(" String" , " GIT_BRANCH" , " \" $gitBranch \" " )
9869
9970 ndk {
10071 // noinspection ChromeOsAbiSupport
@@ -118,27 +89,22 @@ android {
11889 dex {
11990 useLegacyPackaging = true
12091 }
121- // AGP 9.0.0 开始,弃用此方法,插件暂未实现新的迁移方式
122- applicationVariants.all {
123- outputs.all {
124- (this as BaseVariantOutputImpl ).outputFileName =
125- " ${apkId} _${versionName} _${versionCode} _${buildType.name} .apk"
126- }
127- }
12892 }
12993
13094 val properties: Properties ? = loadPropertiesFromFile(" signing.properties" )
131- val getString: ( String , String , String ) -> String = { propertyName, environmentName, prompt ->
95+ fun getString ( propertyName : String , environmentName : String , prompt : String ): String =
13296 properties?.getProperty(propertyName)
13397 ? : System .getenv(environmentName)
134- ? : System .console()?.readLine(" \n $prompt : " ) ? : " "
98+ ? : System .console()?.readLine(" \n $prompt : " ).orEmpty()
99+
100+ val buildTimeSuffix: String by lazy {
101+ SimpleDateFormat (" MMddHHmm" ).apply {
102+ timeZone = TimeZone .getTimeZone(" Asia/Shanghai" )
103+ }.format(Date ())
135104 }
136- val gitCode = getVersionCode()
137- val gitHash = getGitHash()
138- val sdf = SimpleDateFormat (" MMddHHmm" ).apply {
139- timeZone = TimeZone .getTimeZone(" Asia/Shanghai" )
105+ val dateSuffix: String by lazy {
106+ DateTimeFormatter .ofPattern(" yyyyMMdd" ).format(LocalDateTime .now())
140107 }
141- val buildTime = sdf.format(Date ())
142108
143109 signingConfigs {
144110 create(" hasProperties" ) {
@@ -156,80 +122,63 @@ android {
156122 }
157123
158124 buildTypes {
159- val applyBase: com.android.build.api.dsl.BuildType .() -> Unit = {
125+ val configSigning: ApplicationBuildType .() -> Unit = {
126+ val signingConfigName = if (properties != null ) " hasProperties" else " debug"
127+ signingConfig = signingConfigs.findByName(signingConfigName)
128+ }
129+
130+ val applyBase: ApplicationBuildType .() -> Unit = {
160131 isMinifyEnabled = true
161- proguardFiles(
162- getDefaultProguardFile(" proguard-android-optimize.txt" ),
163- " proguard-rules.pro"
164- )
165- buildConfigField(" String" , " GIT_CODE" , " \" $gitCode \" " )
132+ proguardFiles(getDefaultProguardFile(" proguard-android-optimize.txt" ), " proguard-rules.pro" )
133+ buildConfigField(" String" , " GIT_CODE" , " \" $gitVersionCode \" " )
166134 }
167135
168136 release {
169137 applyBase()
138+ configSigning()
170139 buildConfigField(" String" , " GIT_HASH" , " \" $gitHash \" " )
171140 proguardFiles(" proguard-log.pro" )
172-
173- versionNameSuffix = " _${DateTimeFormatter .ofPattern(" yyyyMMdd" ).format(LocalDateTime .now())} "
174- signingConfig = if (properties != null ) {
175- signingConfigs[" hasProperties" ]
176- } else {
177- signingConfigs[" debug" ]
178- }
141+ versionNameSuffix = " -$dateSuffix "
179142 }
180143
181144 create(" beta" ) {
182145 applyBase()
183- buildConfigField(" String" , " GIT_HASH" , " \" ${getGitHashLong()} \" " )
184-
185- versionNameSuffix = " _${DateTimeFormatter .ofPattern(" yyyyMMdd" ).format(LocalDateTime .now())} "
186- signingConfig = if (properties != null ) {
187- signingConfigs[" hasProperties" ]
188- } else {
189- signingConfigs[" debug" ]
190- }
146+ configSigning()
147+ buildConfigField(" String" , " GIT_HASH" , " \" $gitHashLong \" " )
148+ versionNameSuffix = " -$dateSuffix "
191149 }
192150
193151 create(" canary" ) {
194152 applyBase()
195- buildConfigField(" String" , " GIT_HASH" , " \" ${getGitHashLong()} \" " )
196-
197- versionNameSuffix = " _${gitHash} _r${gitCode} "
198- signingConfig = if (properties != null ) {
199- signingConfigs[" hasProperties" ]
200- } else {
201- signingConfigs[" debug" ]
202- }
153+ configSigning()
154+ buildConfigField(" String" , " GIT_HASH" , " \" $gitHashLong \" " )
155+ versionNameSuffix = " -${gitHash} -r${gitVersionCode} "
203156 }
204157
205158 debug {
206- buildConfigField(" String" , " GIT_HASH" , " \" ${getGitHashLong()} \" " )
207- buildConfigField(" String" , " GIT_CODE" , " \" $gitCode \" " )
208-
209159 isMinifyEnabled = false
210- versionNameSuffix = " _${buildTime} _r${gitCode} "
160+ buildConfigField(" String" , " GIT_HASH" , " \" $gitHashLong \" " )
161+ buildConfigField(" String" , " GIT_CODE" , " \" $gitVersionCode \" " )
162+ versionNameSuffix = " -${buildTimeSuffix} -r${gitVersionCode} "
211163 if (properties != null ) {
212- signingConfig = signingConfigs[ " hasProperties" ]
164+ signingConfig = signingConfigs.findByName( " hasProperties" )
213165 }
214166 }
215167 }
216168
217169}
218170
219- /* androidComponents {
220- onVariants { variant ->
221- variant.outputs.forEach { output ->
222- val versionName = variant.outputs.first().versionName
223- val versionCode = variant.outputs.first().versionCode
224- val buildTypeName = variant.buildType!!
225-
226-
227- val newFileName = "${apkId}_${versionName}_${versionCode}_${buildTypeName}.apk"
228-
229- output.outputFileName.set(newFileName)
230- }
171+ afterEvaluate {
172+ base {
173+ val buildTypeName = gradle.startParameter.taskNames
174+ .firstOrNull { it.contains(" assemble" , ignoreCase = true ) }
175+ ?.substringAfterLast(" :" )
176+ ?.replace(" assemble" , " " , ignoreCase = true )
177+ ?.lowercase() ? : " debug"
178+ val suffix = android.buildTypes.findByName(buildTypeName)?.versionNameSuffix ? : " "
179+ archivesName.set(" $apkId -${android.defaultConfig.versionName}$suffix " )
231180 }
232- }*/
181+ }
233182
234183// https://stackoverflow.com/a/77745844
235184tasks.withType<PackageAndroidArtifact > {
0 commit comments