mirror of
https://github.com/actions/runner-images.git
synced 2025-12-20 06:35:47 +00:00
[Windows] Switch android tools installation to use cmdline-tools' sdkmanager (#3682)
* Switch android installation to use cmdline-tools * Rename update-android sdk to install-android sdk as for the other OSs * Remove cmdline-tools installation from toolset as it's installed * Regenerate licenses for the new sdkmanager * Add tests to check that both sdkmanagers are available * Simplify Get-AndroidInstalledPackages function to use list_installed * Resolve nitpicks from @AlenaSviridenko * Add extra lines to separate comments from the code * Remove extra line after $androidNDKs * Modify software report to output any version number * Change regex pattern to output the group * Currently the function returns 4. instead of 4.0, this change fixes it
This commit is contained in:
148
images/win/scripts/Installers/Install-AndroidSDK.ps1
Normal file
148
images/win/scripts/Installers/Install-AndroidSDK.ps1
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
################################################################################
|
||||||
|
## File: Install-AndroidSDK.ps1
|
||||||
|
## Desc: Install and update Android SDK and tools
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# install command-line tools
|
||||||
|
$cmdlineToolsUrl = "https://dl.google.com/android/repository/commandlinetools-win-7302050_latest.zip"
|
||||||
|
$cmdlineToolsArchPath = Start-DownloadWithRetry -Url $cmdlineToolsUrl -Name "cmdline-tools.zip"
|
||||||
|
$sdkInstallRoot = "C:\Program Files (x86)\Android\android-sdk"
|
||||||
|
$sdkRoot = "C:\Android\android-sdk"
|
||||||
|
Expand-Archive -Path $cmdlineToolsArchPath -DestinationPath "${sdkInstallRoot}\cmdline-tools" -Force
|
||||||
|
|
||||||
|
# cmdline tools should be installed in ${sdkInstallRoot}\cmdline-tools\latest\bin, but archive contains ${sdkInstallRoot}\cmdline-tools\bin
|
||||||
|
# we need to create the proper folder structure
|
||||||
|
Rename-Item "${sdkInstallRoot}\cmdline-tools\cmdline-tools" "latest"
|
||||||
|
|
||||||
|
# ANDROID_NDK_PATH/HOME should not contain spaces. Otherwise, the script ndk-build.cmd gives an error https://github.com/actions/virtual-environments/issues/1122
|
||||||
|
# create "C:\Android" directory and a hardlink inside pointed to sdk in Program Files
|
||||||
|
New-Item -Path "C:\Android" -ItemType Directory
|
||||||
|
New-Item -Path "$sdkRoot" -ItemType SymbolicLink -Value "$sdkInstallRoot"
|
||||||
|
$sdkManager = "$sdkRoot\cmdline-tools\latest\bin\sdkmanager.bat"
|
||||||
|
|
||||||
|
# Install the standard Android SDK licenses. Currently, there isn't a better way to do this,
|
||||||
|
# so we are base64-encoded a zip of the licenses directory from another installation.
|
||||||
|
# To create this base64 string, create a zip file that contains nothing but a 'licenses' folder,
|
||||||
|
# which folder contains the accepted license files found in 'C:\Program Files (x86)\Android\android-sdk\licenses'.
|
||||||
|
# Then, run this in PowerShell:
|
||||||
|
# $LicensesZipFileName = 'C:\Program Files (x86)\Android\android-sdk\Licenses.zip'
|
||||||
|
# $base64Content = [Convert]::ToBase64String([IO.File]::ReadAllBytes($LicensesZipFileName))
|
||||||
|
# echo $base64Content
|
||||||
|
# Another possible solution that works in powershell core:
|
||||||
|
# Write-Ouptut "y" | $sdkManager <packagename>
|
||||||
|
$licenseContentBase64 = "UEsDBBQAAAAAAKNK11IAAAAAAAAAAAAAAAAJAAAAbGljZW5zZXMvUEsDBAoAAAAAAJ1K11K7n0IrKgAAACoAAAAhAAAAbGljZW5zZXMvYW5kcm9pZC1nb29nbGV0di1saWNlbnNlDQo2MDEwODViOTRjZDc3ZjBiNTRmZjg2NDA2OTU3MDk5ZWJlNzljNGQ2UEsDBAoAAAAAAKBK11LzQumJKgAAACoAAAAkAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstYXJtLWRidC1saWNlbnNlDQo4NTlmMzE3Njk2ZjY3ZWYzZDdmMzBhNTBhNTU2MGU3ODM0YjQzOTAzUEsDBAoAAAAAAKFK11IKSOJFKgAAACoAAAAcAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstbGljZW5zZQ0KMjQzMzNmOGE2M2I2ODI1ZWE5YzU1MTRmODNjMjgyOWIwMDRkMWZlZVBLAwQKAAAAAACiStdSec1a4SoAAAAqAAAAJAAAAGxpY2Vuc2VzL2FuZHJvaWQtc2RrLXByZXZpZXctbGljZW5zZQ0KODQ4MzFiOTQwOTY0NmE5MThlMzA1NzNiYWI0YzljOTEzNDZkOGFiZFBLAwQKAAAAAACiStdSk6vQKCoAAAAqAAAAGwAAAGxpY2Vuc2VzL2dvb2dsZS1nZGstbGljZW5zZQ0KMzNiNmEyYjY0NjA3ZjExYjc1OWYzMjBlZjlkZmY0YWU1YzQ3ZDk3YVBLAwQKAAAAAACiStdSrE3jESoAAAAqAAAAJAAAAGxpY2Vuc2VzL2ludGVsLWFuZHJvaWQtZXh0cmEtbGljZW5zZQ0KZDk3NWY3NTE2OThhNzdiNjYyZjEyNTRkZGJlZWQzOTAxZTk3NmY1YVBLAwQKAAAAAACjStdSkb1vWioAAAAqAAAAJgAAAGxpY2Vuc2VzL21pcHMtYW5kcm9pZC1zeXNpbWFnZS1saWNlbnNlDQplOWFjYWI1YjVmYmI1NjBhNzJjZmFlY2NlODk0Njg5NmZmNmFhYjlkUEsBAj8AFAAAAAAAo0rXUgAAAAAAAAAAAAAAAAkAJAAAAAAAAAAQAAAAAAAAAGxpY2Vuc2VzLwoAIAAAAAAAAQAYACIHOBcRaNcBIgc4FxFo1wHBTVQTEWjXAVBLAQI/AAoAAAAAAJ1K11K7n0IrKgAAACoAAAAhACQAAAAAAAAAIAAAACcAAABsaWNlbnNlcy9hbmRyb2lkLWdvb2dsZXR2LWxpY2Vuc2UKACAAAAAAAAEAGACUEFUTEWjXAZQQVRMRaNcB6XRUExFo1wFQSwECPwAKAAAAAACgStdS80LpiSoAAAAqAAAAJAAkAAAAAAAAACAAAACQAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstYXJtLWRidC1saWNlbnNlCgAgAAAAAAABABgAsEM0FBFo1wGwQzQUEWjXAXb1MxQRaNcBUEsBAj8ACgAAAAAAoUrXUgpI4kUqAAAAKgAAABwAJAAAAAAAAAAgAAAA/AAAAGxpY2Vuc2VzL2FuZHJvaWQtc2RrLWxpY2Vuc2UKACAAAAAAAAEAGAAsMGUVEWjXASwwZRURaNcB5whlFRFo1wFQSwECPwAKAAAAAACiStdSec1a4SoAAAAqAAAAJAAkAAAAAAAAACAAAABgAQAAbGljZW5zZXMvYW5kcm9pZC1zZGstcHJldmlldy1saWNlbnNlCgAgAAAAAAABABgA7s3WFRFo1wHuzdYVEWjXAfGm1hURaNcBUEsBAj8ACgAAAAAAokrXUpOr0CgqAAAAKgAAABsAJAAAAAAAAAAgAAAAzAEAAGxpY2Vuc2VzL2dvb2dsZS1nZGstbGljZW5zZQoAIAAAAAAAAQAYAGRDRxYRaNcBZENHFhFo1wFfHEcWEWjXAVBLAQI/AAoAAAAAAKJK11KsTeMRKgAAACoAAAAkACQAAAAAAAAAIAAAAC8CAABsaWNlbnNlcy9pbnRlbC1hbmRyb2lkLWV4dHJhLWxpY2Vuc2UKACAAAAAAAAEAGADGsq0WEWjXAcayrRYRaNcBxrKtFhFo1wFQSwECPwAKAAAAAACjStdSkb1vWioAAAAqAAAAJgAkAAAAAAAAACAAAACbAgAAbGljZW5zZXMvbWlwcy1hbmRyb2lkLXN5c2ltYWdlLWxpY2Vuc2UKACAAAAAAAAEAGAA4LjgXEWjXATguOBcRaNcBIgc4FxFo1wFQSwUGAAAAAAgACACDAwAACQMAAAAA"
|
||||||
|
$licenseContent = [System.Convert]::FromBase64String($licenseContentBase64)
|
||||||
|
Set-Content -Path "$sdkInstallRoot\android-sdk-licenses.zip" -Value $licenseContent -Encoding Byte
|
||||||
|
Expand-Archive "$sdkInstallRoot\android-sdk-licenses.zip" $sdkInstallRoot
|
||||||
|
|
||||||
|
# install platform-tools
|
||||||
|
$platformToolsPath = Join-Path -Path $sdkInstallRoot -ChildPath "platform-tools"
|
||||||
|
# Remove outdated platform-tools that was brought by Visual Studio Android package
|
||||||
|
if (Test-Path $platformToolsPath)
|
||||||
|
{
|
||||||
|
Write-Host "Removing previous platform-tools installation from Visual Studio component"
|
||||||
|
Remove-Item $platformToolsPath -Recurse -Force
|
||||||
|
}
|
||||||
|
|
||||||
|
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
|
||||||
|
-AndroidSDKRootPath $sdkRoot `
|
||||||
|
-AndroidPackages "platform-tools"
|
||||||
|
|
||||||
|
# get packages to install from the toolset
|
||||||
|
$androidToolset = (Get-ToolsetContent).android
|
||||||
|
|
||||||
|
# get packages info
|
||||||
|
$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath $sdkManager
|
||||||
|
|
||||||
|
# platforms
|
||||||
|
[int]$platformMinVersion = $androidToolset.platform_min_version
|
||||||
|
$platformListByVersion = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
|
||||||
|
-PrefixPackageName "platforms;" `
|
||||||
|
-MinimumVersion $platformMinVersion `
|
||||||
|
-Delimiter "-" `
|
||||||
|
-Index 1
|
||||||
|
$platformListByName = Get-AndroidPackagesByName -AndroidPackages $androidPackages `
|
||||||
|
-PrefixPackageName "platforms;" | Where-Object {$_ -match "-\D+$"}
|
||||||
|
$platformList = $platformListByVersion + $platformListByName
|
||||||
|
|
||||||
|
# build-tools
|
||||||
|
[version]$buildToolsMinVersion = $androidToolset.build_tools_min_version
|
||||||
|
$buildToolsList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
|
||||||
|
-PrefixPackageName "build-tools;" `
|
||||||
|
-MinimumVersion $buildToolsMinVersion `
|
||||||
|
-Delimiter ";" `
|
||||||
|
-Index 1
|
||||||
|
|
||||||
|
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
|
||||||
|
-AndroidSDKRootPath $sdkRoot `
|
||||||
|
-AndroidPackages $platformList
|
||||||
|
|
||||||
|
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
|
||||||
|
-AndroidSDKRootPath $sdkRoot `
|
||||||
|
-AndroidPackages $buildToolsList
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# NDKs
|
||||||
|
$ndkLTSMajorVersion = $androidToolset.ndk.lts
|
||||||
|
$ndkLatestMajorVersion = $androidToolset.ndk.latest
|
||||||
|
|
||||||
|
$ndkLTSPackageName = Get-AndroidPackagesByName -AndroidPackages $androidPackages `
|
||||||
|
-PrefixPackageName "ndk;$ndkLTSMajorVersion" `
|
||||||
|
| Sort-Object -Unique `
|
||||||
|
| Select-Object -Last 1
|
||||||
|
|
||||||
|
$ndkLatestPackageName = Get-AndroidPackagesByName -AndroidPackages $androidPackages `
|
||||||
|
-PrefixPackageName "ndk;$ndkLatestMajorVersion" `
|
||||||
|
| Sort-Object -Unique `
|
||||||
|
| Select-Object -Last 1
|
||||||
|
|
||||||
|
$androidNDKs = @($ndkLTSPackageName, $ndkLatestPackageName)
|
||||||
|
|
||||||
|
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
|
||||||
|
-AndroidSDKRootPath $sdkRoot `
|
||||||
|
-AndroidPackages $androidNDKs
|
||||||
|
|
||||||
|
$ndkLTSVersion = $ndkLTSPackageName.Split(';')[1]
|
||||||
|
$ndkLatestVersion = $ndkLatestPackageName.Split(';')[1]
|
||||||
|
|
||||||
|
# Android NDK root path.
|
||||||
|
$ndkRoot = "$sdkRoot\ndk-bundle"
|
||||||
|
# This changes were added due to incompatibility with android ndk-bundle (ndk;22.0.7026061).
|
||||||
|
# Link issue virtual-environments: https://github.com/actions/virtual-environments/issues/2481
|
||||||
|
# Link issue xamarin-android: https://github.com/xamarin/xamarin-android/issues/5526
|
||||||
|
New-Item -Path $ndkRoot -ItemType SymbolicLink -Value "$sdkRoot\ndk\$ndkLTSVersion"
|
||||||
|
|
||||||
|
if (Test-Path $ndkRoot) {
|
||||||
|
setx ANDROID_HOME $sdkRoot /M
|
||||||
|
setx ANDROID_SDK_ROOT $sdkRoot /M
|
||||||
|
setx ANDROID_NDK_HOME $ndkRoot /M
|
||||||
|
setx ANDROID_NDK_PATH $ndkRoot /M
|
||||||
|
setx ANDROID_NDK_ROOT $ndkRoot /M
|
||||||
|
(Get-Content -Encoding UTF8 "${ndkRoot}\ndk-build.cmd").replace('%~dp0\build\ndk-build.cmd','"%~dp0\build\ndk-build.cmd"')|Set-Content -Encoding UTF8 "${ndkRoot}\ndk-build.cmd"
|
||||||
|
} else {
|
||||||
|
Write-Host "LTS NDK $ndkLTSVersion is not installed at path $ndkRoot"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$ndkLatestPath = "$sdkRoot\ndk\$ndkLatestVersion"
|
||||||
|
if (Test-Path $ndkLatestPath) {
|
||||||
|
setx ANDROID_NDK_LATEST_HOME $ndkLatestPath /M
|
||||||
|
} else {
|
||||||
|
Write-Host "Latest NDK $ndkLatestVersion is not installed at path $ndkLatestPath"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Invoke-PesterTests -TestFile "Android"
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
## File: Update-AndroidSDK.ps1
|
|
||||||
## Desc: Install and update Android SDK and tools
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
# Install the standard Android SDK licenses. In the past, there wasn't a better way to do this,
|
|
||||||
# so we are base64-encoding a zip of the licenses directory from another installation.
|
|
||||||
# To create this base64 string, create a zip file that contains nothing but a 'licenses' folder,
|
|
||||||
# which folder contains the accepted license files found in 'C:\Program Files (x86)\Android\android-sdk\licenses'.
|
|
||||||
# Then, run this in PowerShell:
|
|
||||||
# $LicensesZipFileName = 'C:\Program Files (x86)\Android\android-sdk\Licenses.zip'
|
|
||||||
# $base64Content = [Convert]::ToBase64String([IO.File]::ReadAllBytes($LicensesZipFileName))
|
|
||||||
# echo $base64Content
|
|
||||||
#
|
|
||||||
# Future: see if the base64 technique can be avoided by running this PowerShell script to accept all licenses.
|
|
||||||
# This fails when run on a live agent, likely because non-interactive mode is set.
|
|
||||||
# It may work fine during image generation (this script).
|
|
||||||
# for($i=0; $i -lt 100; $i++) { $response += "y`n"}; $response | .\sdkmanager.bat --licenses
|
|
||||||
$base64Content = "UEsDBBQAAAAAAKJeN06amkPzKgAAACoAAAAhAAAAbGljZW5zZXMvYW5kcm9pZC1nb29nbGV0di1saWNlbnNlDQpmYzk0NmU4ZjIzMWYzZTMxNTliZjBiN2M2NTVjOTI0Y2IyZTM4MzMwUEsDBBQAAAAIAKBrN05E+YSqQwAAAFQAAAAcAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstbGljZW5zZQXByREAIQgEwP9WmYsjhxgOKJN/CNs9vmdOQ2zdRw2dxQnWjqQ/3oIgXQM9vqUiwkiX8ljWea4ZlCF3xTo1pz6w+wdQSwMEFAAAAAAAxV43TpECY7AqAAAAKgAAACQAAABsaWNlbnNlcy9hbmRyb2lkLXNkay1wcmV2aWV3LWxpY2Vuc2UNCjUwNDY2N2Y0YzBkZTdhZjFhMDZkZTlmNGIxNzI3Yjg0MzUxZjI5MTBQSwMEFAAAAAAAzF43TpOr0CgqAAAAKgAAABsAAABsaWNlbnNlcy9nb29nbGUtZ2RrLWxpY2Vuc2UNCjMzYjZhMmI2NDYwN2YxMWI3NTlmMzIwZWY5ZGZmNGFlNWM0N2Q5N2FQSwMEFAAAAAAAz143TqxN4xEqAAAAKgAAACQAAABsaWNlbnNlcy9pbnRlbC1hbmRyb2lkLWV4dHJhLWxpY2Vuc2UNCmQ5NzVmNzUxNjk4YTc3YjY2MmYxMjU0ZGRiZWVkMzkwMWU5NzZmNWFQSwMEFAAAAAAA0l43Tu2ee/8qAAAAKgAAACYAAABsaWNlbnNlcy9taXBzLWFuZHJvaWQtc3lzaW1hZ2UtbGljZW5zZQ0KNjNkNzAzZjU2OTJmZDg5MWQ1YWNhY2ZiZDhlMDlmNDBmYzk3NjEwNVBLAQIUABQAAAAAAKJeN06amkPzKgAAACoAAAAhAAAAAAAAAAEAIAAAAAAAAABsaWNlbnNlcy9hbmRyb2lkLWdvb2dsZXR2LWxpY2Vuc2VQSwECFAAUAAAACACgazdORPmEqkMAAABUAAAAHAAAAAAAAAABACAAAABpAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstbGljZW5zZVBLAQIUABQAAAAAAMVeN06RAmOwKgAAACoAAAAkAAAAAAAAAAEAIAAAAOYAAABsaWNlbnNlcy9hbmRyb2lkLXNkay1wcmV2aWV3LWxpY2Vuc2VQSwECFAAUAAAAAADMXjdOk6vQKCoAAAAqAAAAGwAAAAAAAAABACAAAABSAQAAbGljZW5zZXMvZ29vZ2xlLWdkay1saWNlbnNlUEsBAhQAFAAAAAAAz143TqxN4xEqAAAAKgAAACQAAAAAAAAAAQAgAAAAtQEAAGxpY2Vuc2VzL2ludGVsLWFuZHJvaWQtZXh0cmEtbGljZW5zZVBLAQIUABQAAAAAANJeN07tnnv/KgAAACoAAAAmAAAAAAAAAAEAIAAAACECAABsaWNlbnNlcy9taXBzLWFuZHJvaWQtc3lzaW1hZ2UtbGljZW5zZVBLBQYAAAAABgAGANoBAACPAgAAAAA="
|
|
||||||
$content = [System.Convert]::FromBase64String($base64Content)
|
|
||||||
Set-Content -Path .\android-sdk-licenses.zip -Value $content -Encoding Byte
|
|
||||||
$sdkInstallRoot = "C:\Program Files (x86)\Android\android-sdk"
|
|
||||||
$sdkRoot = "C:\Android\android-sdk"
|
|
||||||
Expand-Archive -Path .\android-sdk-licenses.zip -DestinationPath $sdkInstallRoot -Force
|
|
||||||
New-Item -Path "C:\Android" -ItemType Directory
|
|
||||||
New-Item -Path "$sdkRoot" -ItemType SymbolicLink -Value "$sdkInstallRoot"
|
|
||||||
|
|
||||||
# run the updates.
|
|
||||||
# keep newer versions in descending order
|
|
||||||
|
|
||||||
# Get android content from toolset
|
|
||||||
$androidToolset = (Get-ToolsetContent).android
|
|
||||||
$sdkManager = "$sdkRoot\tools\bin\sdkmanager.bat"
|
|
||||||
|
|
||||||
& $sdkManager --sdk_root=$sdkRoot "platform-tools"
|
|
||||||
|
|
||||||
# get packages info
|
|
||||||
$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath $sdkManager
|
|
||||||
|
|
||||||
# platforms
|
|
||||||
[int]$platformMinVersion = $androidToolset.platform_min_version
|
|
||||||
$platformListByVersion = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
|
|
||||||
-PrefixPackageName "platforms;" `
|
|
||||||
-MinimumVersion $platformMinVersion `
|
|
||||||
-Delimiter "-" `
|
|
||||||
-Index 1
|
|
||||||
$platformListByName = Get-AndroidPackagesByName -AndroidPackages $androidPackages `
|
|
||||||
-PrefixPackageName "platforms;" | Where-Object {$_ -match "-\D+$"}
|
|
||||||
$platformList = $platformListByVersion + $platformListByName
|
|
||||||
|
|
||||||
# build-tools
|
|
||||||
[version]$buildToolsMinVersion = $androidToolset.build_tools_min_version
|
|
||||||
$buildToolsList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
|
|
||||||
-PrefixPackageName "build-tools;" `
|
|
||||||
-MinimumVersion $buildToolsMinVersion `
|
|
||||||
-Delimiter ";" `
|
|
||||||
-Index 1
|
|
||||||
|
|
||||||
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
|
|
||||||
-AndroidSDKRootPath $sdkRoot `
|
|
||||||
-AndroidPackages $platformList
|
|
||||||
|
|
||||||
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
|
|
||||||
-AndroidSDKRootPath $sdkRoot `
|
|
||||||
-AndroidPackages $buildToolsList
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
# NDKs
|
|
||||||
$ndkLTSMajorVersion = $androidToolset.ndk.lts
|
|
||||||
$ndkLatestMajorVersion = $androidToolset.ndk.latest
|
|
||||||
|
|
||||||
$ndkLTSPackageName = Get-AndroidPackagesByName -AndroidPackages $androidPackages `
|
|
||||||
-PrefixPackageName "ndk;$ndkLTSMajorVersion" `
|
|
||||||
| Sort-Object -Unique `
|
|
||||||
| Select-Object -Last 1
|
|
||||||
|
|
||||||
$ndkLatestPackageName = Get-AndroidPackagesByName -AndroidPackages $androidPackages `
|
|
||||||
-PrefixPackageName "ndk;$ndkLatestMajorVersion" `
|
|
||||||
| Sort-Object -Unique `
|
|
||||||
| Select-Object -Last 1
|
|
||||||
|
|
||||||
$androidNDKs = @($ndkLTSPackageName, $ndkLatestPackageName)
|
|
||||||
|
|
||||||
|
|
||||||
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
|
|
||||||
-AndroidSDKRootPath $sdkRoot `
|
|
||||||
-AndroidPackages $androidNDKs
|
|
||||||
|
|
||||||
$ndkLTSVersion = $ndkLTSPackageName.Split(';')[1]
|
|
||||||
$ndkLatestVersion = $ndkLatestPackageName.Split(';')[1]
|
|
||||||
|
|
||||||
# Android NDK root path.
|
|
||||||
$ndkRoot = "$sdkRoot\ndk-bundle"
|
|
||||||
# This changes were added due to incompatibility with android ndk-bundle (ndk;22.0.7026061).
|
|
||||||
# Link issue virtual-environments: https://github.com/actions/virtual-environments/issues/2481
|
|
||||||
# Link issue xamarin-android: https://github.com/xamarin/xamarin-android/issues/5526
|
|
||||||
New-Item -Path $ndkRoot -ItemType SymbolicLink -Value "$sdkRoot\ndk\$ndkLTSVersion"
|
|
||||||
|
|
||||||
if (Test-Path $ndkRoot) {
|
|
||||||
setx ANDROID_HOME $sdkRoot /M
|
|
||||||
setx ANDROID_SDK_ROOT $sdkRoot /M
|
|
||||||
setx ANDROID_NDK_HOME $ndkRoot /M
|
|
||||||
setx ANDROID_NDK_PATH $ndkRoot /M
|
|
||||||
setx ANDROID_NDK_ROOT $ndkRoot /M
|
|
||||||
(Get-Content -Encoding UTF8 "${ndkRoot}\ndk-build.cmd").replace('%~dp0\build\ndk-build.cmd','"%~dp0\build\ndk-build.cmd"')|Set-Content -Encoding UTF8 "${ndkRoot}\ndk-build.cmd"
|
|
||||||
} else {
|
|
||||||
Write-Host "LTS NDK $ndkLTSVersion is not installed at path $ndkRoot"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
$ndkLatestPath = "$sdkRoot\ndk\$ndkLatestVersion"
|
|
||||||
if (Test-Path $ndkLatestPath) {
|
|
||||||
setx ANDROID_NDK_LATEST_HOME $ndkLatestPath /M
|
|
||||||
} else {
|
|
||||||
Write-Host "Latest NDK $ndkLatestVersion is not installed at path $ndkLatestPath"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
Invoke-PesterTests -TestFile "Android"
|
|
||||||
@@ -16,21 +16,13 @@ function Get-AndroidSDKRoot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function Get-AndroidSDKManagerPath {
|
function Get-AndroidSDKManagerPath {
|
||||||
return Join-Path $env:ANDROID_HOME "tools\bin\sdkmanager.bat"
|
return Join-Path $env:ANDROID_HOME "cmdline-tools\latest\bin\sdkmanager.bat"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-AndroidInstalledPackages {
|
function Get-AndroidInstalledPackages {
|
||||||
$androidSDKManagerPath = Get-AndroidSDKManagerPath
|
$androidSDKManagerPath = Get-AndroidSDKManagerPath
|
||||||
$androidSDKManagerList = & $androidSDKManagerPath --list --include_obsolete
|
$androidSDKManagerList = & $androidSDKManagerPath --list_installed
|
||||||
$androidInstalledPackages = @()
|
return $androidSDKManagerList
|
||||||
foreach($packageInfo in $androidSDKManagerList) {
|
|
||||||
if($packageInfo -Match "Available Packages:") {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
$androidInstalledPackages += $packageInfo
|
|
||||||
}
|
|
||||||
return $androidInstalledPackages
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Build-AndroidTable {
|
function Build-AndroidTable {
|
||||||
@@ -38,7 +30,7 @@ function Build-AndroidTable {
|
|||||||
return @(
|
return @(
|
||||||
@{
|
@{
|
||||||
"Package" = "Android Command Line Tools"
|
"Package" = "Android Command Line Tools"
|
||||||
"Version" = Get-AndroidPackageVersions -PackageInfo $packageInfo -MatchedString "Android SDK Command-line Tools"
|
"Version" = Get-AndroidCommandLineToolsVersion
|
||||||
},
|
},
|
||||||
@{
|
@{
|
||||||
"Package" = "Android Emulator"
|
"Package" = "Android Emulator"
|
||||||
@@ -127,6 +119,13 @@ function Get-AndroidPlatformVersions {
|
|||||||
return ($versions -Join "<br>")
|
return ($versions -Join "<br>")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Get-AndroidCommandLineToolsVersion {
|
||||||
|
$commandLineTools = Get-AndroidSDKManagerPath
|
||||||
|
(& $commandLineTools --version | Out-String).Trim() -match "(?<version>^(\d+\.){1,}\d+$)" | Out-Null
|
||||||
|
$commandLineToolsVersion = $Matches.Version
|
||||||
|
return $commandLineToolsVersion
|
||||||
|
}
|
||||||
|
|
||||||
function Get-AndroidBuildToolVersions {
|
function Get-AndroidBuildToolVersions {
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
|
|||||||
@@ -51,33 +51,52 @@ Describe "Android SDK" {
|
|||||||
$additionalToolsTestCases += @{ additionalToolVersion = $_; installedPackages = $androidInstalledPackages }
|
$additionalToolsTestCases += @{ additionalToolVersion = $_; installedPackages = $androidInstalledPackages }
|
||||||
}
|
}
|
||||||
|
|
||||||
It "Platform version <platformVersion> is installed" -TestCases $platformTestCases {
|
Context "SDKManagers" {
|
||||||
"$installedPackages" | Should -Match "$platformVersion"
|
$testCases = @(
|
||||||
}
|
@{
|
||||||
|
PackageName = "SDK tools"
|
||||||
|
Sdkmanager = "$env:ANDROID_HOME\tools\bin\sdkmanager.bat"
|
||||||
|
},
|
||||||
|
@{
|
||||||
|
PackageName = "Command-line tools"
|
||||||
|
Sdkmanager = "$env:ANDROID_HOME\cmdline-tools\latest\bin\sdkmanager.bat"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
It "Platform build tools <buildToolsVersion> is installed" -TestCases $buildToolsTestCases {
|
It "Sdkmanager from <PackageName> is available" -TestCases $testCases {
|
||||||
"$installedPackages" | Should -Match "$buildToolsVersion"
|
"$Sdkmanager --list" | Should -ReturnZeroExitCode
|
||||||
}
|
|
||||||
|
|
||||||
if (Test-IsWin19) {
|
|
||||||
It "Extra package <extraPackage> is installed" -TestCases $extraPackagesTestCases {
|
|
||||||
"$installedPackages" | Should -Match "extras;$extraPackage"
|
|
||||||
}
|
|
||||||
|
|
||||||
It "Addon package <addonPackage> is installed" -TestCases $addonsTestCases {
|
|
||||||
"$installedPackages" | Should -Match "add-ons;$addonPackage"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
It "Additional tool <additionalToolVersion> is installed" -TestCases $additionalToolsTestCases {
|
Context "Packages" {
|
||||||
"$installedPackages" | Should -Match $additionalToolVersion
|
It "Platform version <platformVersion> is installed" -TestCases $platformTestCases {
|
||||||
}
|
"$installedPackages" | Should -Match "$platformVersion"
|
||||||
|
}
|
||||||
|
|
||||||
It "LTS NDK is installed" -TestCases @(@{ ndkLTSVersion = $ndkLTSMajorVersion; installedPackages = $androidInstalledPackages }) {
|
It "Platform build tools <buildToolsVersion> is installed" -TestCases $buildToolsTestCases {
|
||||||
"$installedPackages" | Should -Match "ndk;$ndkLTSVersion"
|
"$installedPackages" | Should -Match "$buildToolsVersion"
|
||||||
}
|
}
|
||||||
|
|
||||||
It "Latest NDK is installed" -TestCases @(@{ ndkLatestVersion = $ndkLatestMajorVersion; installedPackages = $androidInstalledPackages }) {
|
if (Test-IsWin19) {
|
||||||
"$installedPackages" | Should -Match "ndk;$ndkLatestVersion"
|
It "Extra package <extraPackage> is installed" -TestCases $extraPackagesTestCases {
|
||||||
|
"$installedPackages" | Should -Match "extras;$extraPackage"
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Addon package <addonPackage> is installed" -TestCases $addonsTestCases {
|
||||||
|
"$installedPackages" | Should -Match "add-ons;$addonPackage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Additional tool <additionalToolVersion> is installed" -TestCases $additionalToolsTestCases {
|
||||||
|
"$installedPackages" | Should -Match $additionalToolVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
It "LTS NDK is installed" -TestCases @(@{ ndkLTSVersion = $ndkLTSMajorVersion; installedPackages = $androidInstalledPackages }) {
|
||||||
|
"$installedPackages" | Should -Match "ndk;$ndkLTSVersion"
|
||||||
|
}
|
||||||
|
|
||||||
|
It "Latest NDK is installed" -TestCases @(@{ ndkLatestVersion = $ndkLatestMajorVersion; installedPackages = $androidInstalledPackages }) {
|
||||||
|
"$installedPackages" | Should -Match "ndk;$ndkLatestVersion"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,8 +165,7 @@
|
|||||||
"additional_tools": [
|
"additional_tools": [
|
||||||
"cmake;3.10.2.4988404",
|
"cmake;3.10.2.4988404",
|
||||||
"cmake;3.18.1",
|
"cmake;3.18.1",
|
||||||
"patcher;v4",
|
"patcher;v4"
|
||||||
"cmdline-tools;latest"
|
|
||||||
],
|
],
|
||||||
"ndk": {
|
"ndk": {
|
||||||
"lts": "21",
|
"lts": "21",
|
||||||
|
|||||||
@@ -165,8 +165,7 @@
|
|||||||
"additional_tools": [
|
"additional_tools": [
|
||||||
"cmake;3.10.2.4988404",
|
"cmake;3.10.2.4988404",
|
||||||
"cmake;3.18.1",
|
"cmake;3.18.1",
|
||||||
"patcher;v4",
|
"patcher;v4"
|
||||||
"cmdline-tools;latest"
|
|
||||||
],
|
],
|
||||||
"ndk": {
|
"ndk": {
|
||||||
"lts": "21",
|
"lts": "21",
|
||||||
|
|||||||
@@ -230,7 +230,7 @@
|
|||||||
"{{ template_dir }}/scripts/Installers/Install-PyPy.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-PyPy.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Install-Toolset.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-Toolset.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Configure-Toolset.ps1",
|
"{{ template_dir }}/scripts/Installers/Configure-Toolset.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Update-AndroidSDK.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-AndroidSDK.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Install-Pipx.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-Pipx.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Install-PipxPackages.ps1"
|
"{{ template_dir }}/scripts/Installers/Install-PipxPackages.ps1"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -233,7 +233,7 @@
|
|||||||
"{{ template_dir }}/scripts/Installers/Install-PyPy.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-PyPy.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Install-Toolset.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-Toolset.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Configure-Toolset.ps1",
|
"{{ template_dir }}/scripts/Installers/Configure-Toolset.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Update-AndroidSDK.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-AndroidSDK.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Install-AzureModules.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-AzureModules.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Install-Pipx.ps1",
|
"{{ template_dir }}/scripts/Installers/Install-Pipx.ps1",
|
||||||
"{{ template_dir }}/scripts/Installers/Install-PipxPackages.ps1"
|
"{{ template_dir }}/scripts/Installers/Install-PipxPackages.ps1"
|
||||||
|
|||||||
Reference in New Issue
Block a user