/
build.gradle
133 lines (120 loc) · 4.85 KB
/
build.gradle
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
String androidGroup = 'Android Pre-Test Commands'
String androidSubGroup = 'Android Sub Commands'
String defaultDescription = "Check if required emulator imgae is installed, install if not, create emulator from image, start emulator "
String createAndRunMessage = "Starts emulator, creates and starts emulator if it does not exist "
// Android version details in form of [ VERSION_NAME, EMULATOR_IMAGE_NAME ]
String[] androidImageN = ["ANDROID-O", "system-images;android-27;google_apis_playstore;x86"]
String[] androidImageNMinus1 = ["ANDROID-N", "system-images;android-25;google_apis_playstore;x86"]
String[] androidImageNMinus2 = ["ANDROID-M", "system-images;android-23;google_apis;x86"]
task listEmulators(type: Exec) {
group androidSubGroup
description 'lists all emulators on host machine'
commandLine 'bash', '-c', 'avdmanager list avd | grep "Name"'
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString()
}
}
task createAndRunEmulatorAndroidM(dependsOn: listEmulators) {
group androidSubGroup
description createAndRunMessage + androidImageNMinus2[0]
doFirst {
String existingEmulators = listEmulators.output()
createEmulatorIfItDoesNotItExist(existingEmulators, androidImageNMinus2[0], androidImageNMinus2[1])
}
doLast {
startEmulator(androidImageNMinus2[0])
}
}
task createAndRunEmulatorAndroidN(dependsOn: listEmulators) {
group androidSubGroup
description createAndRunMessage + androidImageNMinus1[0]
doFirst {
String existingEmulators = listEmulators.output()
createEmulatorIfItDoesNotItExist(existingEmulators, androidImageNMinus1[0], androidImageNMinus1[1])
}
doLast {
startEmulator(androidImageNMinus1[0])
}
}
task createAndRunEmulatorAndroidO(dependsOn: listEmulators) {
group androidSubGroup
description createAndRunMessage + androidImageN[0]
doFirst {
String existingEmulators = listEmulators.output()
createEmulatorIfItDoesNotItExist(existingEmulators, androidImageN[0], androidImageN[1])
}
doLast {
startEmulator(androidImageN[0])
}
}
task listInstalledSDKPackages(type: Exec) {
group androidSubGroup
description "List all installed android sdk packages"
commandLine 'bash', '-c', 'sdkmanager --list --channel=0'
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString().split("Available Packages:")[0]
}
}
task installSDKPackages(dependsOn: listInstalledSDKPackages) {
group androidSubGroup
description "Install missing emulator packages"
doLast {
String installedPackages = listInstalledSDKPackages.output()
checkAndInstallSDKPackage(installedPackages, androidImageN[1])
checkAndInstallSDKPackage(installedPackages, androidImageNMinus1[1])
checkAndInstallSDKPackage(installedPackages, androidImageNMinus2[1])
}
}
task launchAndroidMEmulator {
group androidGroup
description defaultDescription + androidImageNMinus2[0]
dependsOn 'installSDKPackages'
dependsOn 'createAndRunEmulatorAndroidM'
tasks.findByName('createAndRunEmulatorAndroidM').mustRunAfter 'installSDKPackages'
}
task launchAndroidNEmulator {
group androidGroup
description defaultDescription + androidImageNMinus1[0]
dependsOn 'installSDKPackages'
dependsOn 'createAndRunEmulatorAndroidN'
tasks.findByName('createAndRunEmulatorAndroidN').mustRunAfter 'installSDKPackages'
}
task launchAndroidOEmulator {
group androidGroup
description defaultDescription + androidImageN[0]
dependsOn 'installSDKPackages'
dependsOn 'createAndRunEmulatorAndroidO'
tasks.findByName('createAndRunEmulatorAndroidO').mustRunAfter 'installSDKPackages'
}
def checkAndInstallSDKPackage(String installedPackages, String packageToInstall) {
if(!installedPackages.contains(packageToInstall)) {
println("Installing " + packageToInstall)
exec {
executable "sdkmanager"
args packageToInstall
}
} else {
println(packageToInstall + " is already installed")
}
}
def createEmulatorIfItDoesNotItExist(String existingEmulators, String versionName, String systemImage) {
println(existingEmulators)
if(existingEmulators.contains(versionName)) {
println("emulator " + versionName + " exists")
} else {
println("emulator not found, creating a new " + versionName + " emulator")
exec {
String command = 'echo no | avdmanager create avd -n "' + versionName + '" -c 1000M -k "' + systemImage + '"'
commandLine 'bash', '-c', command
}
}
}
def startEmulator(String emulatorName) {
println("starting " + emulatorName + " emulator")
exec {
String command = '"$(dirname "$(which emulator)")"/emulator -avd ' + emulatorName +' &'
commandLine 'bash', '-c', command
}
}