Merge pull request #1696 from akv-platform/al-cheb/win-android-dyn

[Windows] Retrieve the list of Android packages for installing dynamically
This commit is contained in:
Maxim Lobanov
2020-10-02 09:43:41 +03:00
committed by GitHub
7 changed files with 85 additions and 33 deletions

View File

@@ -37,6 +37,9 @@ Export-ModuleMember -Function @(
'Get-VsCatalogJsonPath'
'Get-VisualStudioPath'
'Install-AndroidSDKPackages'
'Get-AndroidPackages'
'Get-AndroidPackagesByName'
'Get-AndroidPackagesByVersion'
'Get-VisualStudioPackages'
'Get-VisualStudioComponents'
)

View File

@@ -418,3 +418,41 @@ function Install-AndroidSDKPackages {
& $AndroidSDKManagerPath --sdk_root=$AndroidSDKRootPath "$PrefixPackageName$package"
}
}
function Get-AndroidPackages {
Param
(
[Parameter(Mandatory=$true)]
[string]$AndroidSDKManagerPath
)
return (& $AndroidSDKManagerPath --list --verbose).Trim() | Foreach-Object { $_.Split()[0] } | Where-Object {$_}
}
function Get-AndroidPackagesByName {
Param (
[Parameter(Mandatory=$true)]
[string[]]$AndroidPackages,
[Parameter(Mandatory=$true)]
[string]$PrefixPackageName
)
return $AndroidPackages | Where-Object { "$_".StartsWith($PrefixPackageName) }
}
function Get-AndroidPackagesByVersion {
Param (
[Parameter(Mandatory=$true)]
[string[]]$AndroidPackages,
[Parameter(Mandatory=$true)]
[string]$PrefixPackageName,
[object]$MinimumVersion,
[char]$Delimiter,
[int]$Index = 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 { $_.Split($Delimiter)[$Index] -as $Type} -Unique
}

View File

@@ -3,14 +3,7 @@
## Desc: Install and update Android SDK and tools
################################################################################
# Download the latest command line tools so that we can accept all of the licenses.
# See https://developer.android.com/studio/#command-tools
$sdkArchPath = Start-DownloadWithRetry -Url "https://dl.google.com/android/repository/sdk-tools-windows-4333796.zip" -Name "android-sdk-tools.zip"
# Don't replace the one that VS installs as it seems to break things.
Expand-Archive -Path $sdkArchPath -DestinationPath android-sdk -Force
$sdk = Get-Item -Path .\android-sdk
$ErrorActionPreference = "Stop"
# 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.
@@ -30,7 +23,6 @@ $content = [System.Convert]::FromBase64String($base64Content)
Set-Content -Path .\android-sdk-licenses.zip -Value $content -Encoding Byte
Expand-Archive -Path .\android-sdk-licenses.zip -DestinationPath 'C:\Program Files (x86)\Android\android-sdk' -Force
# run the updates.
# keep newer versions in descending order
@@ -42,15 +34,32 @@ $sdkManager = "$sdkRoot\tools\bin\sdkmanager.bat"
& $sdkManager --sdk_root=$sdkRoot "platform-tools"
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
-AndroidSDKRootPath $sdkRoot `
-AndroidPackages $androidToolset.platform_list `
-PrefixPackageName "platforms;"
# get packages info
$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath $sdkManager
# platforms
[int]$platformMinVersion = $androidToolset.platform_min_version
$platformList = Get-AndroidPackagesByVersion -AndroidPackages $androidPackages `
-PrefixPackageName "platforms;" `
-MinimumVersion $platformMinVersion `
-Delimiter "-" `
-Index 1
# 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 $androidToolset.build_tools `
-PrefixPackageName "build-tools;"
-AndroidPackages $platformList
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
-AndroidSDKRootPath $sdkRoot `
-AndroidPackages $buildToolsList
Install-AndroidSDKPackages -AndroidSDKManagerPath $sdkManager `
-AndroidSDKRootPath $sdkRoot `

View File

@@ -31,7 +31,6 @@ function Get-AndroidInstalledPackages {
return $androidInstalledPackages
}
function Build-AndroidTable {
$packageInfo = Get-AndroidInstalledPackages
return @(

View File

@@ -2,16 +2,27 @@ Import-Module (Join-Path $PSScriptRoot "..\SoftwareReport\SoftwareReport.Android
Describe "Android SDK" {
$androidToolset = (Get-ToolsetContent).android
$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath (Get-AndroidSDKManagerPath)
$androidInstalledPackages = Get-AndroidInstalledPackages
$platformTestCases = @()
$platformList = $androidToolset.platform_list
[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 = @()
$buildToolsList = $androidToolset.build_tools
[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 }
}
@@ -35,14 +46,14 @@ Describe "Android SDK" {
}
It "Platform version <platformVersion> is installed" -TestCases $platformTestCases {
"$installedPackages" | Should -Match "platforms;$platformVersion"
"$installedPackages" | Should -Match "$platformVersion"
}
It "Platform build tools <buildToolsVersion> is installed" -TestCases $buildToolsTestCases {
"$installedPackages" | Should -Match "build-tools;$buildToolsVersion"
"$installedPackages" | Should -Match "$buildToolsVersion"
}
if (Test-isWin19) {
if (Test-IsWin19) {
It "Extra package <extraPackage> is installed" -TestCases $extraPackagesTestCases {
"$installedPackages" | Should -Match "extras;$extraPackage"
}