11#addin nuget : ? package= Cake . AppleSimulator & version = 0.2 .0
22#addin nuget: ? package = Cake . Android . Adb & version = 3.2 .0
33#addin nuget: ? package = Cake . Android . AvdManager & version = 2.2 .0
4+ #addin nuget: ? package = Cake . Android . SdkManager & version = 3.0 .2
45#addin nuget: ? package = Cake . FileHelpers & version = 3.3 .0
6+ #addin nuget: ? package = Cake . Boots & version = 1.1 .0 .712 - preview2
57
68var TARGET = Argument ( "target" , "Default" ) ;
79
@@ -33,15 +35,24 @@ var TCP_LISTEN_HOST = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName())
3335
3436var OUTPUT_PATH = MakeAbsolute( ( DirectoryPath ) "../output/" ) ;
3537
36- var ANDROID_HOME = EnvironmentVariable( "ANDROID_HOME" ) ;
38+ // set up env
39+ var ANDROID_SDK_ROOT = GetAndroidSDKPath( ) ;
40+ var ANDROID_HOME = ANDROID_SDK_ROOT ;
3741
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 ) ;
4346
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 ( ',' ) ;
4556
4657// utils
4758
@@ -88,6 +99,28 @@ Task DownloadTcpTextAsync(int port, FilePath filename, Action waitAction = null)
8899 } ) ;
89100}
90101
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+ }
91124
92125// iOS tasks
93126
@@ -100,7 +133,6 @@ Task("build-ios")
100133 c . Properties [ "Platform" ] = new List < string > { "iPhoneSimulator" } ;
101134 c . Properties [ "BuildIpa" ] = new List < string > { "true" } ;
102135 c . Properties [ "ContinuousIntegrationBuild" ] = new List < string > { "false" } ;
103- c . Properties [ "RestoreConfigFile" ] = new List < string > { RESTORE_CONFIG } ;
104136 c . Targets . Clear ( ) ;
105137 c . Targets . Add ( "Rebuild" ) ;
106138 c . BinaryLogger = new MSBuildBinaryLogSettings {
@@ -138,14 +170,71 @@ Task("test-ios-emu")
138170
139171// Android tasks
140172
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+
141229Task( "build-android" )
230+ . IsDependentOn ( "provision-androidsdk" )
231+ . IsDependentOn ( "boots" )
142232 . Does ( ( ) =>
143233{
144234 MSBuild ( ANDROID_PROJ , c => {
145235 c . Configuration = "Debug" ; // needs to be debug so unit tests get discovered
146236 c . Restore = true ;
147237 c . Properties [ "ContinuousIntegrationBuild" ] = new List < string > { "false" } ;
148- c . Properties [ "RestoreConfigFile" ] = new List < string > { RESTORE_CONFIG } ;
149238 c . Targets . Clear ( ) ;
150239 c . Targets . Add ( "Rebuild" ) ;
151240 c . Targets . Add ( "SignAndroidPackage" ) ;
@@ -188,12 +277,14 @@ Task("test-android-emu")
188277 }
189278 Information ( "Waited {0} seconds for the emulator to boot up." , waited ) ;
190279
280+ var targetArch = ANDROID_EMU_TARGET . Split ( ';' ) . Last ( ) ;
281+
191282 // Run the tests
192283 var resultCode = StartProcess ( "xharness" , "android test " +
193284 $ "--app=\" { ANDROID_APK_PATH } \" " +
194285 $ "--package-name=\" { ANDROID_PKG_NAME } \" " +
195286 $ "--instrumentation=\" { ANDROID_INSTRUMENTATION_NAME } \" " +
196- $ "--device-arch=\" x86 \" " +
287+ $ "--device-arch=\" { targetArch } \" " +
197288 $ "--output-directory=\" { ANDROID_TEST_RESULTS_PATH } \" " +
198289 $ "--verbosity=\" Debug\" ") ;
199290
@@ -225,7 +316,6 @@ Task("build-uwp")
225316 c . Properties [ "AppxBundlePlatforms" ] = new List < string > { "x86" } ;
226317 c . Properties [ "AppxBundle" ] = new List < string > { "Always" } ;
227318 c . Properties [ "AppxPackageSigningEnabled" ] = new List < string > { "true" } ;
228- c . Properties [ "RestoreConfigFile" ] = new List < string > { RESTORE_CONFIG } ;
229319 c . Targets . Clear ( ) ;
230320 c . Targets . Add ( "Rebuild" ) ;
231321 c . BinaryLogger = new MSBuildBinaryLogSettings {
0 commit comments