[Windows] Refactor script installing Android SDK and packages (#8877)

This commit is contained in:
Vasilii Polikarpov
2023-11-27 12:28:21 +01:00
committed by GitHub
parent 9492109c62
commit 12066050d0
7 changed files with 276 additions and 185 deletions

View File

@@ -4,6 +4,58 @@
## Supply chain security: checksum validation
################################################################################
# Actual Android SDK installation directory
$SDKInstallRoot = "C:\Program Files (x86)\Android\android-sdk"
# Hardlink to the Android SDK installation directory with no spaces in the path.
# ANDROID_NDK* env vars should not contain spaces, otherwise ndk-build.cmd gives an error
# https://github.com/actions/runner-images/issues/1122
$SDKRootPath = "C:\Android\android-sdk"
#region functions
function Install-AndroidSDKPackages {
<#
.SYNOPSIS
This function installs the specified Android SDK packages.
.DESCRIPTION
The Install-AndroidSDKPackages function takes an array of package names as a parameter and installs each of them using the sdkmanager.bat script.
.PARAMETER Packages
An array of package names in the format of SDK-style paths to be installed.
.EXAMPLE
Install-AndroidSDKPackages -Packages "platforms;android-29", "build-tools;29.0.2"
This command installs the Android SDK Platform 29 and Build-Tools 29.0.2.
#>
Param
(
[Parameter(Mandatory = $true)]
[AllowEmptyCollection()]
[AllowNull()]
[string[]]$Packages
)
# The sdkmanager.bat script is used to install Android SDK packages.
$SDKManager = "$SDKRootPath\cmdline-tools\latest\bin\sdkmanager.bat"
$errors = @()
foreach ($package in $Packages) {
& $SDKManager --install "$package" --sdk_root=$SDKRootPath
if ($LASTEXITCODE -ne 0) {
$errors += "Failed to install package $package with exit code $LASTEXITCODE"
}
}
if ($errors.Count -gt 0) {
throw $errors
}
}
#endregion
# get packages to install from the toolset
$androidToolset = (Get-ToolsetContent).android
# Newer version(s) require Java 11 by default
@@ -17,21 +69,17 @@ $localFileHash = (Get-FileHash -Path $cmdlineToolsArchPath -Algorithm SHA256).Ha
Use-ChecksumComparison -LocalFileHash $localFileHash -DistributorFileHash $androidToolset.hash
#endregion
$sdkInstallRoot = "C:\Program Files (x86)\Android\android-sdk"
$sdkRoot = "C:\Android\android-sdk"
Expand-7ZipArchive -Path $cmdlineToolsArchPath -DestinationPath "${sdkInstallRoot}\cmdline-tools"
Expand-7ZipArchive -Path $cmdlineToolsArchPath -DestinationPath "${SDKInstallRoot}\cmdline-tools"
# cmdline tools should be installed in ${sdkInstallRoot}\cmdline-tools\latest\bin, but archive contains ${sdkInstallRoot}\cmdline-tools\bin
# 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
Invoke-SBWithRetry -Command {
Rename-Item "${sdkInstallRoot}\cmdline-tools\cmdline-tools" "latest" -ErrorAction Stop
Rename-Item "${SDKInstallRoot}\cmdline-tools\cmdline-tools" "latest" -ErrorAction Stop
}
# ANDROID_NDK_PATH/HOME should not contain spaces. Otherwise, the script ndk-build.cmd gives an error https://github.com/actions/runner-images/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"
# Create hardlink at $SDKRootPath pointing to SDK installation directory in Program Files
New-Item -Path (Split-Path $SDKRootPath -Parent) -ItemType Directory -Force
New-Item -Path "$SDKRootPath" -ItemType SymbolicLink -Value "$SDKInstallRoot"
# 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.
@@ -42,92 +90,73 @@ $sdkManager = "$sdkRoot\cmdline-tools\latest\bin\sdkmanager.bat"
# $base64Content = [Convert]::ToBase64String([IO.File]::ReadAllBytes($LicensesZipFileName))
# echo $base64Content
# Another possible solution that works in powershell core:
# Write-Ouptut "y" | $sdkManager <packagename>
# Write-Ouptut "y" | $sdkmanager.bat <packagename>
$licenseContentBase64 = "UEsDBBQAAAAAAKNK11IAAAAAAAAAAAAAAAAJAAAAbGljZW5zZXMvUEsDBAoAAAAAAJ1K11K7n0IrKgAAACoAAAAhAAAAbGljZW5zZXMvYW5kcm9pZC1nb29nbGV0di1saWNlbnNlDQo2MDEwODViOTRjZDc3ZjBiNTRmZjg2NDA2OTU3MDk5ZWJlNzljNGQ2UEsDBAoAAAAAAKBK11LzQumJKgAAACoAAAAkAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstYXJtLWRidC1saWNlbnNlDQo4NTlmMzE3Njk2ZjY3ZWYzZDdmMzBhNTBhNTU2MGU3ODM0YjQzOTAzUEsDBAoAAAAAAKFK11IKSOJFKgAAACoAAAAcAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstbGljZW5zZQ0KMjQzMzNmOGE2M2I2ODI1ZWE5YzU1MTRmODNjMjgyOWIwMDRkMWZlZVBLAwQKAAAAAACiStdSec1a4SoAAAAqAAAAJAAAAGxpY2Vuc2VzL2FuZHJvaWQtc2RrLXByZXZpZXctbGljZW5zZQ0KODQ4MzFiOTQwOTY0NmE5MThlMzA1NzNiYWI0YzljOTEzNDZkOGFiZFBLAwQKAAAAAACiStdSk6vQKCoAAAAqAAAAGwAAAGxpY2Vuc2VzL2dvb2dsZS1nZGstbGljZW5zZQ0KMzNiNmEyYjY0NjA3ZjExYjc1OWYzMjBlZjlkZmY0YWU1YzQ3ZDk3YVBLAwQKAAAAAACiStdSrE3jESoAAAAqAAAAJAAAAGxpY2Vuc2VzL2ludGVsLWFuZHJvaWQtZXh0cmEtbGljZW5zZQ0KZDk3NWY3NTE2OThhNzdiNjYyZjEyNTRkZGJlZWQzOTAxZTk3NmY1YVBLAwQKAAAAAACjStdSkb1vWioAAAAqAAAAJgAAAGxpY2Vuc2VzL21pcHMtYW5kcm9pZC1zeXNpbWFnZS1saWNlbnNlDQplOWFjYWI1YjVmYmI1NjBhNzJjZmFlY2NlODk0Njg5NmZmNmFhYjlkUEsBAj8AFAAAAAAAo0rXUgAAAAAAAAAAAAAAAAkAJAAAAAAAAAAQAAAAAAAAAGxpY2Vuc2VzLwoAIAAAAAAAAQAYACIHOBcRaNcBIgc4FxFo1wHBTVQTEWjXAVBLAQI/AAoAAAAAAJ1K11K7n0IrKgAAACoAAAAhACQAAAAAAAAAIAAAACcAAABsaWNlbnNlcy9hbmRyb2lkLWdvb2dsZXR2LWxpY2Vuc2UKACAAAAAAAAEAGACUEFUTEWjXAZQQVRMRaNcB6XRUExFo1wFQSwECPwAKAAAAAACgStdS80LpiSoAAAAqAAAAJAAkAAAAAAAAACAAAACQAAAAbGljZW5zZXMvYW5kcm9pZC1zZGstYXJtLWRidC1saWNlbnNlCgAgAAAAAAABABgAsEM0FBFo1wGwQzQUEWjXAXb1MxQRaNcBUEsBAj8ACgAAAAAAoUrXUgpI4kUqAAAAKgAAABwAJAAAAAAAAAAgAAAA/AAAAGxpY2Vuc2VzL2FuZHJvaWQtc2RrLWxpY2Vuc2UKACAAAAAAAAEAGAAsMGUVEWjXASwwZRURaNcB5whlFRFo1wFQSwECPwAKAAAAAACiStdSec1a4SoAAAAqAAAAJAAkAAAAAAAAACAAAABgAQAAbGljZW5zZXMvYW5kcm9pZC1zZGstcHJldmlldy1saWNlbnNlCgAgAAAAAAABABgA7s3WFRFo1wHuzdYVEWjXAfGm1hURaNcBUEsBAj8ACgAAAAAAokrXUpOr0CgqAAAAKgAAABsAJAAAAAAAAAAgAAAAzAEAAGxpY2Vuc2VzL2dvb2dsZS1nZGstbGljZW5zZQoAIAAAAAAAAQAYAGRDRxYRaNcBZENHFhFo1wFfHEcWEWjXAVBLAQI/AAoAAAAAAKJK11KsTeMRKgAAACoAAAAkACQAAAAAAAAAIAAAAC8CAABsaWNlbnNlcy9pbnRlbC1hbmRyb2lkLWV4dHJhLWxpY2Vuc2UKACAAAAAAAAEAGADGsq0WEWjXAcayrRYRaNcBxrKtFhFo1wFQSwECPwAKAAAAAACjStdSkb1vWioAAAAqAAAAJgAkAAAAAAAAACAAAACbAgAAbGljZW5zZXMvbWlwcy1hbmRyb2lkLXN5c2ltYWdlLWxpY2Vuc2UKACAAAAAAAAEAGAA4LjgXEWjXATguOBcRaNcBIgc4FxFo1wFQSwUGAAAAAAgACACDAwAACQMAAAAA"
$licenseContent = [System.Convert]::FromBase64String($licenseContentBase64)
Set-Content -Path "$sdkInstallRoot\android-sdk-licenses.zip" -Value $licenseContent -Encoding Byte
Expand-7ZipArchive -Path "$sdkInstallRoot\android-sdk-licenses.zip" -DestinationPath $sdkInstallRoot
Set-Content -Path "$SDKInstallRoot\android-sdk-licenses.zip" -Value $licenseContent -Encoding Byte
Expand-7ZipArchive -Path "$SDKInstallRoot\android-sdk-licenses.zip" -DestinationPath $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)
{
# Install platform-tools
$platformToolsPath = Join-Path -Path $SDKInstallRoot -ChildPath "platform-tools"
if (Test-Path $platformToolsPath) {
Write-Host "Removing previous platform-tools installation from Visual Studio component"
Remove-Item $platformToolsPath -Recurse -Force
}
Install-AndroidSDKPackages "platform-tools"
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
-AndroidSDKRootPath $sdkRoot `
-AndroidPackages "platform-tools"
# Get Android SDK packages list
$androidPackages = Get-AndroidPackages -SDKRootPath $SDKRootPath
# get packages info
$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath $sdkManager
# Install Android platform versions
# that are greater than or equal to the minimum version
Write-Host "Installing Android SDK packages for platforms..."
$platformList = Get-AndroidPlatformPackages `
-SDKRootPath $SDKRootPath `
-minVersion $androidToolset.platform_min_version
Install-AndroidSDKPackages $platformList
# platforms
[int]$platformMinVersion = $androidToolset.platform_min_version
$platformList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
-PrefixPackageName "platforms;" `
-MinimumVersion $platformMinVersion `
-Delimiter "-" `
-Index 1
# Install Android build-tools versions
# that are greater than or equal to the minimum version
Write-Host "Installing Android SDK packages for build tools..."
$buildToolsList = Get-AndroidBuildToolPackages `
-SDKRootPath $SDKRootPath `
-minVersion $androidToolset.build_tools_min_version
Install-AndroidSDKPackages $buildToolsList
# build-tools
[version]$buildToolsMinVersion = $androidToolset.build_tools_min_version
$buildToolsList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
-PrefixPackageName "build-tools;" `
-MinimumVersion $buildToolsMinVersion `
-Delimiter ";" `
-Index 1
# Install extras, add-ons and additional tools
Write-Host "Installing Android SDK extras, add-ons and additional tools..."
Install-AndroidSDKPackages ($androidToolset.extras | ForEach-Object { "extras;$_" })
Install-AndroidSDKPackages ($androidToolset.addons | ForEach-Object { "add-ons;$_" })
Install-AndroidSDKPackages ($androidToolset.additional_tools)
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
# Install NDKs
$ndkMajorVersions = $androidToolset.ndk.versions
$ndkDefaultMajorVersion = $androidToolset.ndk.default
$ndkLatestMajorVersion = $ndkMajorVersions | Select-Object -Last 1
$androidNDKs = $ndkMajorVersions | Foreach-Object {
Get-AndroidPackagesByName -AndroidPackages $androidPackages -PrefixPackageName "ndk;$_" | Sort-Object -Unique | Select-Object -Last 1
$androidNDKs = @()
foreach ($version in $ndkMajorVersions) {
$packageNamePrefix = "ndk;$version"
$package = $androidPackages | Where-Object { $_.StartsWith($packageNamePrefix) } | Sort-Object -Unique | Select-Object -Last 1
$androidNDKs += $package
}
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
-AndroidSDKRootPath $sdkRoot `
-AndroidPackages $androidNDKs
Write-Host "Installing Android SDK packages for NDKs..."
Install-AndroidSDKPackages $androidNDKs
$ndkLatestVersion = ($androidNDKs | Where-Object { $_ -match "ndk;$ndkLatestMajorVersion" }).Split(';')[1]
$ndkDefaultVersion = ($androidNDKs | Where-Object { $_ -match "ndk;$ndkDefaultMajorVersion" }).Split(';')[1]
$ndkRoot = "$sdkRoot\ndk\$ndkDefaultVersion"
$ndkRoot = "$SDKRootPath\ndk\$ndkDefaultVersion"
# Create env variables
[Environment]::SetEnvironmentVariable("ANDROID_HOME", $sdkRoot, "Machine")
[Environment]::SetEnvironmentVariable("ANDROID_SDK_ROOT", $sdkRoot, "Machine")
[Environment]::SetEnvironmentVariable("ANDROID_HOME", $SDKRootPath, "Machine")
[Environment]::SetEnvironmentVariable("ANDROID_SDK_ROOT", $SDKRootPath, "Machine")
# ANDROID_NDK, ANDROID_NDK_HOME, and ANDROID_NDK_ROOT variables should be set as many customer builds depend on them https://github.com/actions/runner-images/issues/5879
[Environment]::SetEnvironmentVariable("ANDROID_NDK", $ndkRoot, "Machine")
[Environment]::SetEnvironmentVariable("ANDROID_NDK_HOME", $ndkRoot, "Machine")
[Environment]::SetEnvironmentVariable("ANDROID_NDK_ROOT", $ndkRoot, "Machine")
$ndkLatestPath = "$sdkRoot\ndk\$ndkLatestVersion"
$ndkLatestPath = "$SDKRootPath\ndk\$ndkLatestVersion"
if (Test-Path $ndkLatestPath) {
[Environment]::SetEnvironmentVariable("ANDROID_NDK_LATEST_HOME", $ndkLatestPath, "Machine")
} else {

View File

@@ -15,17 +15,6 @@ function Get-AndroidSDKRoot {
return "Location $path"
}
function Get-AndroidSDKManagerPath {
return Join-Path $env:ANDROID_HOME "cmdline-tools\latest\bin\sdkmanager.bat"
}
function Get-AndroidInstalledPackages {
$androidSDKManagerPath = Get-AndroidSDKManagerPath
$androidSDKManagerList = cmd /c "$androidSDKManagerPath --list_installed 2>&1"
$androidSDKManagerList = $androidSDKManagerList -notmatch "Warning"
return $androidSDKManagerList
}
function Build-AndroidTable {
$packageInfo = Get-AndroidInstalledPackages
return @(
@@ -121,7 +110,7 @@ function Get-AndroidPlatformVersions {
}
function Get-AndroidCommandLineToolsVersion {
$commandLineTools = Get-AndroidSDKManagerPath
$commandLineTools = (Join-Path $env:ANDROID_HOME "cmdline-tools\latest\bin\sdkmanager.bat")
(cmd /c "$commandLineTools --version 2>NUL" | Out-String).Trim() -match "(?<version>^(\d+\.){1,}\d+$)" | Out-Null
$commandLineToolsVersion = $Matches.Version
return $commandLineToolsVersion

View File

@@ -40,10 +40,10 @@ Export-ModuleMember -Function @(
'Expand-7ZipArchive'
'Invoke-SBWithRetry'
'Get-VsCatalogJsonPath'
'Install-AndroidSDKPackages'
'Get-AndroidPackages'
'Get-AndroidPackagesByName'
'Get-AndroidPackagesByVersion'
'Get-AndroidPlatformPackages'
'Get-AndroidBuildToolPackages'
'Get-AndroidInstalledPackages'
'Get-VisualStudioInstance'
'Get-VisualStudioComponents'
'Get-WindowsUpdatesHistory'

View File

@@ -431,35 +431,43 @@ function Expand-7ZipArchive {
}
}
function Install-AndroidSDKPackages {
Param
(
[Parameter(Mandatory=$true)]
[string]$AndroidSDKManagerPath,
[Parameter(Mandatory=$true)]
[string]$AndroidSDKRootPath,
[Parameter(Mandatory=$true)]
[AllowEmptyCollection()]
[string[]]$AndroidPackages,
[string] $PrefixPackageName
)
foreach ($package in $AndroidPackages) {
& $AndroidSDKManagerPath --sdk_root=$AndroidSDKRootPath "$PrefixPackageName$package"
}
}
function Get-AndroidPackages {
<#
.SYNOPSIS
This function returns a list of available Android packages.
.DESCRIPTION
The Get-AndroidPackages function checks if a list of packages is already available in a file.
If not, it uses the sdkmanager.bat script to generate a list of available packages and saves it to a file.
It then returns the content of this file.
.PARAMETER SDKRootPath
The root path of the Android SDK installation.
If not specified, the function uses the ANDROID_HOME environment variable.
.EXAMPLE
Get-AndroidPackages -SDKRootPath "C:\Android\SDK"
This command returns a list of available Android packages for the specified SDK root path.
.NOTES
This function requires the Android SDK to be installed and the sdkmanager.bat script to be accessible.
#>
Param
(
[Parameter(Mandatory=$true)]
[string]$AndroidSDKManagerPath
[string]$SDKRootPath
)
$packagesListFile = "C:\Android\android-sdk\packages-list.txt"
if (-not $SDKRootPath) {
$SDKRootPath = $env:ANDROID_HOME
}
$packagesListFile = "$SDKRootPath\packages-list.txt"
$sdkManager = "$SDKRootPath\cmdline-tools\latest\bin\sdkmanager.bat"
if (-Not (Test-Path -Path $packagesListFile -PathType Leaf)) {
(cmd /c "$AndroidSDKManagerPath --list --verbose 2>&1") |
(cmd /c "$sdkManager --list --verbose 2>&1") |
Where-Object { $_ -Match "^[^\s]" } |
Where-Object { $_ -NotMatch "^(Loading |Info: Parsing |---|\[=+|Installed |Available )" } |
Where-Object { $_ -NotMatch "^[^;]*$" } |
@@ -469,32 +477,122 @@ function Get-AndroidPackages {
return Get-Content $packagesListFile
}
function Get-AndroidPackagesByName {
Param (
[Parameter(Mandatory=$true)]
[string[]]$AndroidPackages,
[Parameter(Mandatory=$true)]
[string]$PrefixPackageName
function Get-AndroidPlatformPackages {
<#
.SYNOPSIS
This function returns a list of available Android platform packages.
.DESCRIPTION
The Get-AndroidPlatformPackages function uses the Get-AndroidPackages function to get a list of available packages
and filters it to return only platform packages.
.PARAMETER SDKRootPath
The root path of the Android SDK installation.
If not specified, the function uses the ANDROID_HOME environment variable.
.PARAMETER minimumVersion
The minimum version of the platform packages to include in the result. Default is 0.
.EXAMPLE
Get-AndroidPlatformPackages -SDKRootPath "C:\Android\SDK" -minimumVersion 29
This command returns a list of available Android platform packages for the specified SDK root path with a minimum version of 29.
.NOTES
This function requires the Android SDK to be installed and the sdkmanager.bat script to be accessible.
#>
Param
(
[string]$SDKRootPath,
[Alias("minVersion")]
[int]$minimumVersion = 0
)
return $AndroidPackages | Where-Object { "$_".StartsWith($PrefixPackageName) }
if (-not $SDKRootPath) {
$SDKRootPath = $env:ANDROID_HOME
}
function Get-AndroidPackagesByVersion {
Param (
[Parameter(Mandatory=$true)]
[string[]]$AndroidPackages,
[Parameter(Mandatory=$true)]
[string]$PrefixPackageName,
[object]$MinimumVersion,
[char]$Delimiter,
[int]$Index = 0
return (Get-AndroidPackages -SDKRootPath $SDKRootPath) `
| Where-Object { "$_".StartsWith("platforms;") } `
| Where-Object { ($_.Split("-")[1] -as [int]) -ge $minimumVersion } `
| Sort-Object -Unique
}
function Get-AndroidBuildToolPackages {
<#
.SYNOPSIS
This function returns a list of available Android build tool packages.
.DESCRIPTION
The Get-AndroidBuildToolPackages function uses the Get-AndroidPackages function to get a list of available packages
and filters it to return only build tool packages.
.PARAMETER SDKRootPath
The root path of the Android SDK installation.
If not specified, the function uses the ANDROID_HOME environment variable.
.PARAMETER minimumVersion
The minimum version of the build tool packages to include in the result. Default is 0.0.0.
.EXAMPLE
Get-AndroidBuildToolPackages -SDKRootPath "C:\Android\SDK" -minimumVersion "30.0.2"
This command returns a list of available Android build tool packages for the specified SDK root path with a minimum version of 30.0.2.
.NOTES
This function requires the Android SDK to be installed and the sdkmanager.bat script to be accessible.
#>
Param
(
[string]$SDKRootPath,
[Alias("minVersion")]
[version]$minimumVersion = "0.0.0"
)
$Type = $MinimumVersion.GetType()
$packagesByName = Get-AndroidPackagesByName -AndroidPackages $AndroidPackages -PrefixPackageName $PrefixPackageName
$packagesByVersion = $packagesByName | Where-Object { ($_.Split($Delimiter)[$Index] -as $Type) -ge $MinimumVersion }
return $packagesByVersion | Sort-Object -Unique
if (-not $SDKRootPath) {
$SDKRootPath = $env:ANDROID_HOME
}
return (Get-AndroidPackages -SDKRootPath $SDKRootPath) `
| Where-Object { "$_".StartsWith("build-tools;") } `
| Where-Object { ($_.Split(";")[1] -as [version]) -ge $minimumVersion } `
| Sort-Object -Unique
}
function Get-AndroidInstalledPackages {
<#
.SYNOPSIS
Retrieves a list of installed Android packages.
.DESCRIPTION
This function retrieves a list of installed Android packages using the specified SDK root path.
.PARAMETER SDKRootPath
The root path of the Android SDK.
If not specified, the function uses the ANDROID_HOME environment variable.
.EXAMPLE
Get-AndroidInstalledPackages -SDKRootPath "C:\Android\SDK"
Retrieves a list of installed Android packages using the specified SDK root path.
.NOTES
This function requires the Android SDK to be installed and the SDK root path to be provided.
#>
Param
(
[string]$SDKRootPath
)
if (-not $SDKRootPath) {
$SDKRootPath = $env:ANDROID_HOME
}
$sdkManager = "$SDKRootPath\cmdline-tools\latest\bin\sdkmanager.bat"
return (cmd /c "$sdkManager --list_installed 2>&1") -notmatch "Warning"
}
function Get-WindowsUpdatesHistory {

View File

@@ -1,58 +1,33 @@
Import-Module (Join-Path $PSScriptRoot "..\SoftwareReport\SoftwareReport.Android.psm1") -DisableNameChecking
Describe "Android SDK" {
$androidToolset = (Get-ToolsetContent).android
$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath (Get-AndroidSDKManagerPath)
$androidInstalledPackages = Get-AndroidInstalledPackages
$ndkDefaultMajorVersion = $androidToolset.ndk.default
$ndkDefaultFullVersion = Get-ChildItem "$env:ANDROID_HOME/ndk/$ndkDefaultMajorVersion.*" -Name | Select-Object -Last 1
$ndkVersions = $androidToolset.ndk.versions
$ndkPackagesTestCases = $ndkVersions | ForEach-Object {
$platformList = Get-AndroidPlatformPackages -minVersion $androidToolset.platform_min_version
$platformTestCases = $platformList | ForEach-Object {
@{ platformVersion = $_; installedPackages = $androidInstalledPackages }
}
$buildToolsList = Get-AndroidBuildToolPackages -minVersion $androidToolset.build_tools_min_version
$buildToolsTestCases = $buildToolsList | ForEach-Object {
@{ buildToolsVersion = $_; installedPackages = $androidInstalledPackages }
}
$extraPackagesTestCases = $androidToolset.extra_list | ForEach-Object {
@{ extraPackage = $_; installedPackages = $androidInstalledPackages }
}
$addonsTestCases = $androidToolset.addon_list | ForEach-Object {
@{ addonPackage = $_; installedPackages = $androidInstalledPackages }
}
$additionalToolsTestCases = $androidToolset.additional_tools | ForEach-Object {
@{ additionalToolVersion = $_; installedPackages = $androidInstalledPackages }
}
$ndkPackagesTestCases = $androidToolset.ndk.versions | ForEach-Object {
@{ ndkPackage = $_; installedPackages = $androidInstalledPackages }
}
$platformTestCases = @()
[int]$platformMinVersion = $androidToolset.platform_min_version
$platformList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
-PrefixPackageName "platforms;" `
-MinimumVersion $platformMinVersion `
-Delimiter "-" `
-Index 1
$platformList | ForEach-Object {
$platformTestCases += @{ platformVersion = $_; installedPackages = $androidInstalledPackages }
}
$buildToolsTestCases = @()
[version]$buildToolsMinVersion = $androidToolset.build_tools_min_version
$buildToolsList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
-PrefixPackageName "build-tools;" `
-MinimumVersion $buildToolsMinVersion `
-Delimiter ";" `
-Index 1
$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 }
}
Context "SDKManagers" {
$testCases = @(
@{

View File

@@ -151,7 +151,7 @@
"hash": "8A90E6A3DEB2FA13229B2E335EFD07687DCC8A55A3C544DA9F40B41404993E7D",
"platform_min_version": "19",
"build_tools_min_version": "19.1.0",
"extra_list": [
"extras": [
"android;m2repository",
"google;m2repository",
"google;google_play_services",
@@ -160,7 +160,7 @@
"m2repository;com;android;support;constraint;constraint-layout;1.0.2",
"m2repository;com;android;support;constraint;constraint-layout;1.0.1"
],
"addon_list": [
"addons": [
"addon-google_apis-google-24",
"addon-google_apis-google-23",
"addon-google_apis-google-22",

View File

@@ -135,12 +135,12 @@
"hash": "8A90E6A3DEB2FA13229B2E335EFD07687DCC8A55A3C544DA9F40B41404993E7D",
"platform_min_version": "27",
"build_tools_min_version": "27.0.0",
"extra_list": [
"extras": [
"android;m2repository",
"google;m2repository",
"google;google_play_services"
],
"addon_list": [],
"addons": [],
"additional_tools": [
"cmake;3.18.1",
"cmake;3.22.1"