-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrenameAppBundle.gradle.kts
73 lines (65 loc) · 3.85 KB
/
renameAppBundle.gradle.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
* Renames app bundle to value specified in BuildInfoManager.createAabFilename(...) when `BuildInfoManager.shouldOverrideApkAndAabNames()` is true
* Expected to be included in non-library android modules (likely just :app) via: `apply(from = "../renameAppBundle.gradle.kts")`
* Inspiration from https://stackoverflow.com/a/69305535/201939 and https://stackoverflow.com/a/54010142/201939
*/
if (BuildInfoManager.shouldOverrideApkAndAabNames()) {
tasks.whenTaskAdded {
val verboseLogging = false
// Skip some unnecessary tasks
if (name.startsWith("bundle") &&
!name.contains("Classes") &&
!name.contains("Resources") &&
name != "bundle"
) {
val deletePreviouslyRenamedAabTaskName = "deletePreviouslyRenamed${name.capitalize()}Aab"
val renameAabTaskName = "rename${name.capitalize()}Aab"
val deleteOriginalAabTaskName = "deleteOriginal${name.capitalize()}Aab"
// Quick and dirty way to derive variant name from the current bundleVARIANT task name.
val variant = name.substring("bundle".length).decapitalize()
// Quick and dirty way to derive the buildType and flavor from the variant
val indexOfFlavor = variant.indexOfFirst { it.isUpperCase() }.takeIf { it != -1 }
val flavor = indexOfFlavor?.let { variant.substring(0, it) }
val buildType = indexOfFlavor?.let { variant.substring(it).decapitalize() }
val aabFolderPath = "$buildDir/outputs/bundle/$variant/"
val originalAabFilename = "app-$flavor-$buildType.aab"
val updatedAabFilename = BuildInfoManager.createAabFilename(variant)
if (flavor != null && buildType != null && variant.isNotBlank()) {
if (verboseLogging) {
println("[renameAab] flavor=$flavor")
println("[renameAab] buildType=$buildType")
println("[renameAab] variant=$variant")
println("[renameAab] aabFolderPath=$aabFolderPath")
println("[renameAab] originalAabFilename=$originalAabFilename")
println("[renameAab] updatedAabFilename=$updatedAabFilename")
}
// Cleans up any existing aab file with matching name to allow the future copy-rename task to succeed
tasks.register<Delete>(deletePreviouslyRenamedAabTaskName) {
delete("$aabFolderPath/$updatedAabFilename")
doLast {
println("[deletePreviouslyRenamedAab] delete previously renamed bundle task completed - updatedAabFilename=$updatedAabFilename")
}
}
// Copy-renames the aab file from the original name to the new name
tasks.register<Copy>(renameAabTaskName) {
dependsOn(deletePreviouslyRenamedAabTaskName)
from(aabFolderPath)
setDestinationDir(file(aabFolderPath))
rename(originalAabFilename, updatedAabFilename)
doLast {
println("[renameAab] rename bundle task completed - updatedAabFilename$updatedAabFilename")
}
}
// Cleans up the original aab file to prevent multiple aabs being present in the folder
tasks.register<Delete>(deleteOriginalAabTaskName) {
dependsOn(renameAabTaskName)
delete("$aabFolderPath/$originalAabFilename")
doLast {
println("[deleteOriginalAab] delete original bundle task completed - originalAabFilename=$originalAabFilename")
}
}
finalizedBy(deletePreviouslyRenamedAabTaskName, renameAabTaskName, deleteOriginalAabTaskName)
}
}
}
}