diff --git a/images/win/Windows2016-Azure.json b/images/win/Windows2016-Azure.json index 4bc348900..e5c56c9dc 100644 --- a/images/win/Windows2016-Azure.json +++ b/images/win/Windows2016-Azure.json @@ -509,6 +509,9 @@ }, { "type": "powershell", + "environment_vars":[ + "TOOLSET_JSON_PATH={{user `toolset_json_path`}}" + ], "scripts":[ "{{ template_dir }}/scripts/Installers/Update-AndroidSDK.ps1" ] diff --git a/images/win/Windows2019-Azure.json b/images/win/Windows2019-Azure.json index db6a013fb..4ba806872 100644 --- a/images/win/Windows2019-Azure.json +++ b/images/win/Windows2019-Azure.json @@ -490,6 +490,9 @@ }, { "type": "powershell", + "environment_vars":[ + "TOOLSET_JSON_PATH={{user `toolset_json_path`}}" + ], "scripts":[ "{{ template_dir }}/scripts/Installers/Update-AndroidSDK.ps1" ] diff --git a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 index da1449568..72431f35f 100644 --- a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 +++ b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 @@ -33,4 +33,5 @@ Export-ModuleMember -Function @( 'Get-WhichTool' 'Get-EnvironmentVariable' 'Invoke-PesterTests' + 'Install-AndroidSDKPackages' ) diff --git a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 index 2d6988eaa..ab8f2cfc7 100644 --- a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 +++ b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 @@ -463,3 +463,20 @@ function Extract-7Zip { exit 1 } } + +function Install-AndroidSDKPackages { + Param + ( + [Parameter(Mandatory=$true)] + [string]$AndroidSDKManagerPath, + [Parameter(Mandatory=$true)] + [string]$AndroidSDKRootPath, + [Parameter(Mandatory=$true)] + [string[]]$AndroidPackages, + [string] $PrefixPackageName + ) + + foreach ($package in $AndroidPackages) { + & $AndroidSDKManagerPath --sdk_root=$AndroidSDKRootPath "$PrefixPackageName$package" + } +} diff --git a/images/win/scripts/Installers/Update-AndroidSDK.ps1 b/images/win/scripts/Installers/Update-AndroidSDK.ps1 index 8041a1194..5eeac22fc 100644 --- a/images/win/scripts/Installers/Update-AndroidSDK.ps1 +++ b/images/win/scripts/Installers/Update-AndroidSDK.ps1 @@ -34,82 +34,49 @@ Expand-Archive -Path .\android-sdk-licenses.zip -DestinationPath 'C:\Program Fil # run the updates. # keep newer versions in descending order -$sdk_root = "C:\Program Files (x86)\Android\android-sdk" +# Get android content from toolset +$androidToolset = (Get-ToolsetContent).android -Push-Location -Path $sdk.FullName +$sdkRoot = "C:\Program Files (x86)\Android\android-sdk" +$sdkManager = "$sdkRoot\tools\bin\sdkmanager.bat" -& '.\tools\bin\sdkmanager.bat' --sdk_root=$sdk_root ` - "platform-tools" ` - "platforms;android-30" ` - "platforms;android-29" ` - "platforms;android-28" ` - "platforms;android-27" ` - "platforms;android-26" ` - "platforms;android-25" ` - "platforms;android-24" ` - "platforms;android-23" ` - "platforms;android-22" ` - "platforms;android-21" ` - "platforms;android-19" ` - "build-tools;30.0.0" ` - "build-tools;29.0.3" ` - "build-tools;29.0.2" ` - "build-tools;29.0.1" ` - "build-tools;29.0.0" ` - "build-tools;28.0.3" ` - "build-tools;28.0.2" ` - "build-tools;28.0.1" ` - "build-tools;28.0.0" ` - "build-tools;27.0.3" ` - "build-tools;27.0.2" ` - "build-tools;27.0.1" ` - "build-tools;27.0.0" ` - "build-tools;26.0.3" ` - "build-tools;26.0.2" ` - "build-tools;26.0.1" ` - "build-tools;26.0.0" ` - "build-tools;25.0.3" ` - "build-tools;25.0.2" ` - "build-tools;25.0.1" ` - "build-tools;25.0.0" ` - "build-tools;24.0.3" ` - "build-tools;24.0.2" ` - "build-tools;24.0.1" ` - "build-tools;24.0.0" ` - "build-tools;23.0.3" ` - "build-tools;23.0.2" ` - "build-tools;23.0.1" ` - "build-tools;22.0.1" ` - "build-tools;21.1.2" ` - "build-tools;20.0.0" ` - "build-tools;19.1.0" ` - "extras;android;m2repository" ` - "extras;google;m2repository" ` - "extras;google;google_play_services" ` - "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2" ` - "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1" ` - "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2" ` - "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1" ` - "add-ons;addon-google_apis-google-24" ` - "add-ons;addon-google_apis-google-23" ` - "add-ons;addon-google_apis-google-22" ` - "add-ons;addon-google_apis-google-21" ` - "cmake;3.6.4111459" ` - "cmake;3.10.2.4988404" ` - "patcher;v4" ` - "ndk-bundle" +& $sdkManager --sdk_root=$sdkRoot "platform-tools" - # Android NDK root path. - $ndk_root = "C:\Program Files (x86)\Android\android-sdk\ndk-bundle" +Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` + -AndroidSDKRootPath $sdkRoot ` + -AndroidPackages $androidToolset.platform_list ` + -PrefixPackageName "platforms;" - if (Test-Path $ndk_root){ - setx ANDROID_HOME $sdk_root /M - setx ANDROID_NDK_HOME $ndk_root /M - setx ANDROID_NDK_PATH $ndk_root /M - } else { - Write-Host "NDK is not installed at path $ndk_root" - exit 1 - } +Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` + -AndroidSDKRootPath $sdkRoot ` + -AndroidPackages $androidToolset.build_tools ` + -PrefixPackageName "build-tools;" -Pop-Location +Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` + -AndroidSDKRootPath $sdkRoot ` + -AndroidPackages $androidToolset.extra_list ` + -PrefixPackageName "extras;" + +Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` + -AndroidSDKRootPath $sdkRoot ` + -AndroidPackages $androidToolset.addon_list ` + -PrefixPackageName "add-ons;" + +Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager ` + -AndroidSDKRootPath $sdkRoot ` + -AndroidPackages $androidToolset.additional_tools + +# Android NDK root path. +$ndkRoot = "C:\Program Files (x86)\Android\android-sdk\ndk-bundle" + +if (Test-Path $ndkRoot) { + setx ANDROID_HOME $sdkRoot /M + setx ANDROID_NDK_HOME $ndkRoot /M + setx ANDROID_NDK_PATH $ndkRoot /M +} else { + Write-Host "NDK is not installed at path $ndk_root" + exit 1 +} + +Invoke-PesterTests -TestFile "Android" diff --git a/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 b/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 index 60d7c1854..753af6965 100644 --- a/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 +++ b/images/win/scripts/SoftwareReport/SoftwareReport.Android.psm1 @@ -25,12 +25,12 @@ function Create-AndroidTableObject { } function Get-AndroidSDKManagerPath { - return Join-Path $env:ANDROID_HOME "tools" "bin" "sdkmanager.bat" + return Join-Path $env:ANDROID_HOME "tools\bin\sdkmanager.bat" } function Get-AndroidInstalledPackages { $androidSDKManagerPath = Get-AndroidSDKManagerPath - $androidSDKManagerList = & $androidSDKManagerPath --list --include_obsolete + $androidSDKManagerList = & $androidSDKManagerPath --list --include_obsolete --verbose $androidInstalledPackages = @() foreach($packageInfo in $androidSDKManagerList) { if($packageInfo -Match "Available Packages:") { diff --git a/images/win/scripts/Tests/Android.Tests.ps1 b/images/win/scripts/Tests/Android.Tests.ps1 new file mode 100644 index 000000000..8a1b6c0bb --- /dev/null +++ b/images/win/scripts/Tests/Android.Tests.ps1 @@ -0,0 +1,58 @@ +Import-Module (Join-Path $PSScriptRoot "..\SoftwareReport\SoftwareReport.Android.psm1") -DisableNameChecking + +Describe "Android SDK" { + $androidToolset = (Get-ToolsetContent).android + $androidInstalledPackages = Get-AndroidInstalledPackages + + $platformTestCases = @() + $platformList = $androidToolset.platform_list + $platformList | ForEach-Object { + $platformTestCases += @{ platformVersion = $_; installedPackages = $androidInstalledPackages } + } + + $buildToolsTestCases = @() + $buildToolsList = $androidToolset.build_tools + $buildToolsList | ForEach-Object { + $buildToolsTestCases += @{ buildToolsVersion = $_; installedPackages = $androidInstalledPackages } + } + + $extraPackagesTestCases = @() + $extraPackageList = $androidToolset.extra_list + $extraPackageList | ForEach-Object { + $extraPackagesTestCases += @{ extraPackage = $_; installedPackages = $androidInstalledPackages } + } + + $addonsTestCases = @() + $addonsPackageList = $androidToolset.addon_list + $addonsPackageList | ForEach-Object { + $addonsTestCases += @{ addonPackage = $_; installedPackages = $androidInstalledPackages } + } + + $additionalToolsTestCases = @() + $additionalToolsList = $androidToolset.additional_tools + $additionalToolsList | ForEach-Object { + $additionalToolsTestCases += @{ additionalToolVersion = $_; installedPackages = $androidInstalledPackages } + } + + It "Platform version is installed" -TestCases $platformTestCases { + "$installedPackages" | Should -Match "platforms;$platformVersion" + } + + It "Platform build tools is installed" -TestCases $buildToolsTestCases { + "$installedPackages" | Should -Match "build-tools;$buildToolsVersion" + } + + if (Test-isWin19) { + It "Extra package is installed" -TestCases $extraPackagesTestCases { + "$installedPackages" | Should -Match "extras;$extraPackage" + } + + It "Addon package is installed" -TestCases $addonsTestCases { + "$installedPackages" | Should -Match "add-ons;$addonPackage" + } + } + + It "Additional tool is installed" -TestCases $additionalToolsTestCases { + "$installedPackages" | Should -Match $additionalToolVersion + } +} \ No newline at end of file diff --git a/images/win/toolsets/toolset-2016.json b/images/win/toolsets/toolset-2016.json index e8fde9a6e..a5d6e7a50 100644 --- a/images/win/toolsets/toolset-2016.json +++ b/images/win/toolsets/toolset-2016.json @@ -113,5 +113,34 @@ "4.4.0" ] } - ] + ], + "android": { + "platform_list": [ + "android-30", "android-29", "android-28", "android-27", "android-26", "android-25", "android-24", "android-23", "android-22", "android-21", "android-19" + ], + "build_tools": [ + "30.0.0", "29.0.3", "29.0.2", "29.0.1", "29.0.0", "28.0.3", "28.0.2", "28.0.1", "28.0.0", "27.0.3", "27.0.2", "27.0.1", "27.0.0", "26.0.3", "26.0.2", "26.0.1", "26.0.0", "25.0.3", "25.0.2", "25.0.1", "25.0.0", "24.0.3", "24.0.2", "24.0.1", "24.0.0", "23.0.3", "23.0.2", "23.0.1", "22.0.1", "21.1.2", "20.0.0", "19.1.0" + ], + "extra_list": [ + "android;m2repository", + "google;m2repository", + "google;google_play_services", + "m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2", + "m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1", + "m2repository;com;android;support;constraint;constraint-layout;1.0.2", + "m2repository;com;android;support;constraint;constraint-layout;1.0.1" + ], + "addon_list": [ + "addon-google_apis-google-24", + "addon-google_apis-google-23", + "addon-google_apis-google-22", + "addon-google_apis-google-21" + ], + "additional_tools": [ + "cmake;3.6.4111459", + "cmake;3.10.2.4988404", + "patcher;v4", + "ndk-bundle" + ] + } } \ No newline at end of file diff --git a/images/win/toolsets/toolset-2019.json b/images/win/toolsets/toolset-2019.json index b5ac3ff51..06b235266 100644 --- a/images/win/toolsets/toolset-2019.json +++ b/images/win/toolsets/toolset-2019.json @@ -122,5 +122,34 @@ "4.4.0" ] } - ] + ], + "android": { + "platform_list": [ + "android-30", "android-29", "android-28", "android-27", "android-26", "android-25", "android-24", "android-23", "android-22", "android-21", "android-19" + ], + "build_tools": [ + "30.0.0", "29.0.3", "29.0.2", "29.0.1", "29.0.0", "28.0.3", "28.0.2", "28.0.1", "28.0.0", "27.0.3", "27.0.2", "27.0.1", "27.0.0", "26.0.3", "26.0.2", "26.0.1", "26.0.0", "25.0.3", "25.0.2", "25.0.1", "25.0.0", "24.0.3", "24.0.2", "24.0.1", "24.0.0", "23.0.3", "23.0.2", "23.0.1", "22.0.1", "21.1.2", "20.0.0", "19.1.0" + ], + "extra_list": [ + "android;m2repository", + "google;m2repository", + "google;google_play_services", + "m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2", + "m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1", + "m2repository;com;android;support;constraint;constraint-layout;1.0.2", + "m2repository;com;android;support;constraint;constraint-layout;1.0.1" + ], + "addon_list": [ + "addon-google_apis-google-24", + "addon-google_apis-google-23", + "addon-google_apis-google-22", + "addon-google_apis-google-21" + ], + "additional_tools": [ + "cmake;3.6.4111459", + "cmake;3.10.2.4988404", + "patcher;v4", + "ndk-bundle" + ] + } } \ No newline at end of file