1
1
#addin nuget : ? package= Cake . AppleSimulator & version = 0.2 .0
2
2
#addin nuget: ? package = Cake . Android . Adb & version = 3.2 .0
3
3
#addin nuget: ? package = Cake . Android . AvdManager & version = 2.2 .0
4
+ #addin nuget: ? package = Cake . Android . SdkManager & version = 3.0 .2
4
5
#addin nuget: ? package = Cake . FileHelpers & version = 3.3 .0
6
+ #addin nuget: ? package = Cake . Boots & version = 1.1 .0 .712 - preview2
5
7
6
8
var TARGET = Argument ( "target" , "Default" ) ;
7
9
@@ -33,15 +35,24 @@ var TCP_LISTEN_HOST = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName())
33
35
34
36
var OUTPUT_PATH = MakeAbsolute( ( DirectoryPath ) "../output/" ) ;
35
37
36
- var ANDROID_HOME = EnvironmentVariable( "ANDROID_HOME" ) ;
38
+ // set up env
39
+ var ANDROID_SDK_ROOT = GetAndroidSDKPath( ) ;
40
+ var ANDROID_HOME = ANDROID_SDK_ROOT ;
37
41
38
- System. Environment . SetEnvironmentVariable ( "PATH" ,
39
- $ "{ ANDROID_HOME } /tools/bin" + System . IO . Path . PathSeparator +
40
- $ "{ ANDROID_HOME } /platform-tools" + System . IO . Path . PathSeparator +
41
- $ "{ ANDROID_HOME } /emulator" + System . IO . Path . PathSeparator +
42
- EnvironmentVariable ( "PATH" ) ) ;
42
+ SetEnvironmentVariable ( "PATH", $"{ANDROID_SDK_ROOT}/tools/bin" , prepend : true ) ;
43
+ SetEnvironmentVariable( "PATH" , $ "{ ANDROID_SDK_ROOT } /cmdline-tools/5.0/bin", prepend : true ) ;
44
+ SetEnvironmentVariable( "PATH" , $ "{ ANDROID_SDK_ROOT } /cmdline-tools/7.0/bin", prepend : true ) ;
45
+ SetEnvironmentVariable( "PATH" , $ "{ ANDROID_SDK_ROOT } /cmdline-tools/latest/bin", prepend : true ) ;
43
46
44
- var RESTORE_CONFIG = MakeAbsolute( ( FilePath ) "../devopsnuget.config" ) . FullPath ;
47
+ SetEnvironmentVariable( "PATH" , $ "{ ANDROID_SDK_ROOT } /platform-tools", prepend : true ) ;
48
+ SetEnvironmentVariable( "PATH" , $ "{ ANDROID_SDK_ROOT } /emulator", prepend : true ) ;
49
+
50
+ Information( "Android SDK Root: {0}" , ANDROID_SDK_ROOT ) ;
51
+
52
+ string androidSdks = EnvironmentVariable( "ANDROID_API_SDKS" , "platform-tools,platforms;android-26,platforms;android-27,platforms;android-28,platforms;android-29,build-tools;29.0.3,platforms;android-30,build-tools;30.0.2,platforms;android-32,build-tools;32.0.0,platforms;android-33,build-tools;33.0.2" ) ;
53
+
54
+ Information( "ANDROID_API_SDKS: {0}" , androidSdks ) ;
55
+ string [ ] androidSdkManagerInstalls = androidSdks . Split ( ',' ) ;
45
56
46
57
// utils
47
58
@@ -88,6 +99,28 @@ Task DownloadTcpTextAsync(int port, FilePath filename, Action waitAction = null)
88
99
} ) ;
89
100
}
90
101
102
+ void SetEnvironmentVariable( string name , string value , bool prepend = false)
103
+ {
104
+ var target = EnvironmentVariableTarget. Process ;
105
+
106
+ if ( prepend )
107
+ value = value + System . IO . Path . PathSeparator + EnvironmentVariable ( name ) ;
108
+
109
+ Environment. SetEnvironmentVariable ( name , value , target ) ;
110
+
111
+ Information( "Setting environment variable: {0} = '{1}'" , name , value ) ;
112
+ }
113
+
114
+ string GetAndroidSDKPath( )
115
+ {
116
+ var ANDROID_SDK_ROOT = Argument( "android" , EnvironmentVariable ( "ANDROID_SDK_ROOT" ) ?? EnvironmentVariable ( "ANDROID_HOME" ) ) ;
117
+
118
+ if ( string . IsNullOrEmpty ( ANDROID_SDK_ROOT ) ) {
119
+ throw new Exception( "Environment variable 'ANDROID_SDK_ROOT' or 'ANDROID_HOME' must be set to the Android SDK root." ) ;
120
+ }
121
+
122
+ return ANDROID_SDK_ROOT;
123
+ }
91
124
92
125
// iOS tasks
93
126
@@ -100,7 +133,6 @@ Task("build-ios")
100
133
c . Properties [ "Platform" ] = new List < string > { "iPhoneSimulator" } ;
101
134
c . Properties [ "BuildIpa" ] = new List < string > { "true" } ;
102
135
c . Properties [ "ContinuousIntegrationBuild" ] = new List < string > { "false" } ;
103
- c . Properties [ "RestoreConfigFile" ] = new List < string > { RESTORE_CONFIG } ;
104
136
c . Targets . Clear ( ) ;
105
137
c . Targets . Add ( "Rebuild" ) ;
106
138
c . BinaryLogger = new MSBuildBinaryLogSettings {
@@ -138,14 +170,71 @@ Task("test-ios-emu")
138
170
139
171
// Android tasks
140
172
173
+ Task( "boots" )
174
+ . Does ( async ( ) =>
175
+ {
176
+ await Boots ( Product . XamarinAndroid , ReleaseChannel . Stable ) ;
177
+ } ) ;
178
+
179
+ Task( "provision-androidsdk" )
180
+ . Description ( "Install Xamarin.Android SDK" )
181
+ . Does ( ( ) =>
182
+ {
183
+ Information ( "ANDROID_HOME: {0}" , ANDROID_HOME ) ;
184
+
185
+ if ( androidSdkManagerInstalls . Length > 0 )
186
+ {
187
+ Information ( "Updating Android SDKs" ) ;
188
+ var androidSdkSettings = new AndroidSdkManagerToolSettings {
189
+ SkipVersionCheck = true
190
+ } ;
191
+
192
+ if ( ! String . IsNullOrWhiteSpace ( ANDROID_HOME ) )
193
+ androidSdkSettings . SdkRoot = ANDROID_HOME ;
194
+
195
+ try {
196
+ AcceptLicenses ( androidSdkSettings ) ;
197
+ }
198
+ catch ( Exception exc )
199
+ {
200
+ Information ( "AcceptLicenses: {0}" , exc ) ;
201
+ }
202
+
203
+ try {
204
+ AndroidSdkManagerUpdateAll ( androidSdkSettings ) ;
205
+ }
206
+ catch ( Exception exc )
207
+ {
208
+ Information ( "AndroidSdkManagerUpdateAll: {0}" , exc ) ;
209
+ }
210
+
211
+ try {
212
+ AcceptLicenses ( androidSdkSettings ) ;
213
+ }
214
+ catch ( Exception exc )
215
+ {
216
+ Information ( "AcceptLicenses: {0}" , exc ) ;
217
+ }
218
+
219
+ try {
220
+ AndroidSdkManagerInstall ( androidSdkManagerInstalls , androidSdkSettings ) ;
221
+ }
222
+ catch ( Exception exc )
223
+ {
224
+ Information ( "AndroidSdkManagerInstall: {0}" , exc ) ;
225
+ }
226
+ }
227
+ } ) ;
228
+
141
229
Task( "build-android" )
230
+ . IsDependentOn ( "provision-androidsdk" )
231
+ . IsDependentOn ( "boots" )
142
232
. Does ( ( ) =>
143
233
{
144
234
MSBuild ( ANDROID_PROJ , c => {
145
235
c . Configuration = "Debug" ; // needs to be debug so unit tests get discovered
146
236
c . Restore = true ;
147
237
c . Properties [ "ContinuousIntegrationBuild" ] = new List < string > { "false" } ;
148
- c . Properties [ "RestoreConfigFile" ] = new List < string > { RESTORE_CONFIG } ;
149
238
c . Targets . Clear ( ) ;
150
239
c . Targets . Add ( "Rebuild" ) ;
151
240
c . Targets . Add ( "SignAndroidPackage" ) ;
@@ -188,12 +277,14 @@ Task("test-android-emu")
188
277
}
189
278
Information ( "Waited {0} seconds for the emulator to boot up." , waited ) ;
190
279
280
+ var targetArch = ANDROID_EMU_TARGET . Split ( ';' ) . Last ( ) ;
281
+
191
282
// Run the tests
192
283
var resultCode = StartProcess ( "xharness" , "android test " +
193
284
$ "--app=\" { ANDROID_APK_PATH } \" " +
194
285
$ "--package-name=\" { ANDROID_PKG_NAME } \" " +
195
286
$ "--instrumentation=\" { ANDROID_INSTRUMENTATION_NAME } \" " +
196
- $ "--device-arch=\" x86 \" " +
287
+ $ "--device-arch=\" { targetArch } \" " +
197
288
$ "--output-directory=\" { ANDROID_TEST_RESULTS_PATH } \" " +
198
289
$ "--verbosity=\" Debug\" ") ;
199
290
@@ -225,7 +316,6 @@ Task("build-uwp")
225
316
c . Properties [ "AppxBundlePlatforms" ] = new List < string > { "x86" } ;
226
317
c . Properties [ "AppxBundle" ] = new List < string > { "Always" } ;
227
318
c . Properties [ "AppxPackageSigningEnabled" ] = new List < string > { "true" } ;
228
- c . Properties [ "RestoreConfigFile" ] = new List < string > { RESTORE_CONFIG } ;
229
319
c . Targets . Clear ( ) ;
230
320
c . Targets . Add ( "Rebuild" ) ;
231
321
c . BinaryLogger = new MSBuildBinaryLogSettings {
0 commit comments