Skip to content

Commit 4b8ba4d

Browse files
committed
Update build.gradle.kts
1 parent c28fa4c commit 4b8ba4d

1 file changed

Lines changed: 76 additions & 127 deletions

File tree

app/build.gradle.kts

Lines changed: 76 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// file:noinspection DependencyNotationArgument
2-
import com.android.build.gradle.internal.api.BaseVariantOutputImpl
2+
import com.android.build.api.dsl.ApplicationBuildType
33
import com.android.build.gradle.tasks.PackageAndroidArtifact
44
import java.text.SimpleDateFormat
55
import java.time.LocalDateTime
@@ -13,57 +13,30 @@ plugins {
1313
}
1414

1515
val 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

6841
android {
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
235184
tasks.withType<PackageAndroidArtifact> {

0 commit comments

Comments
 (0)