mirror of
https://github.com/actions/runner-images-sangeeth.git
synced 2025-12-20 06:29:50 +00:00
[macOS] Switch android tools installation to use cmdline-tools' sdkmanager (#3686)
* Switch android installation to use cmdline-tools * Switch android-toolsets and xamarin-android-ndk to use new sdkmanager * Remove cmdline-tools installation from toolset as it's installed * Remove redundant steps with warning prevention * Remove hardcoded licenses as they are accepted during the installation * Add tests to check that both sdkmanagers are available * Simplify Get-AndroidInstalledPackages function to use list_installed * 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:
@@ -33,38 +33,27 @@ ANDROID_ADDON_LIST=($(get_toolset_value '.android."addon-list"[]'))
|
|||||||
ANDROID_ADDITIONAL_TOOLS=($(get_toolset_value '.android."additional-tools"[]'))
|
ANDROID_ADDITIONAL_TOOLS=($(get_toolset_value '.android."additional-tools"[]'))
|
||||||
ANDROID_NDK_MAJOR_LTS=($(get_toolset_value '.android.ndk.lts'))
|
ANDROID_NDK_MAJOR_LTS=($(get_toolset_value '.android.ndk.lts'))
|
||||||
ANDROID_NDK_MAJOR_LATEST=($(get_toolset_value '.android.ndk.latest'))
|
ANDROID_NDK_MAJOR_LATEST=($(get_toolset_value '.android.ndk.latest'))
|
||||||
# Get the latest command line tools from https://developer.android.com/studio/index.html
|
# Get the latest command line tools from https://developer.android.com/studio#cmdline-tools
|
||||||
# Release note: https://developer.android.com/studio/releases/sdk-tools.html
|
ANDROID_OSX_SDK_URL="https://dl.google.com/android/repository/commandlinetools-mac-7302050_latest.zip"
|
||||||
ANDROID_OSX_SDK_LOCATION="https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip"
|
|
||||||
ANDROID_HOME=$HOME/Library/Android/sdk
|
ANDROID_HOME=$HOME/Library/Android/sdk
|
||||||
ANDROID_OSX_SDK_FILE=tools-macosx.zip
|
ANDROID_OSX_SDK_FILE=tools-macosx.zip
|
||||||
|
|
||||||
pushd $HOME
|
pushd $HOME
|
||||||
|
|
||||||
# Prevent the warning of sdkmanager
|
echo "Downloading android command line tools..."
|
||||||
mkdir $HOME/.android
|
download_with_retries $ANDROID_OSX_SDK_URL "." $ANDROID_OSX_SDK_FILE
|
||||||
echo "count=0" >> $HOME/.android/repositories.cfg
|
|
||||||
|
|
||||||
echo "Downloading android sdk..."
|
echo "Uncompressing android command line tools..."
|
||||||
curl -L -o $ANDROID_OSX_SDK_FILE $ANDROID_OSX_SDK_LOCATION
|
|
||||||
|
|
||||||
echo "Uncompressing android sdk..."
|
|
||||||
unzip -q $ANDROID_OSX_SDK_FILE && rm -f $ANDROID_OSX_SDK_FILE
|
|
||||||
rm -rf $HOME/Library/Android/sdk
|
|
||||||
mkdir -p $HOME/Library/Android/sdk
|
mkdir -p $HOME/Library/Android/sdk
|
||||||
|
unzip -q $ANDROID_OSX_SDK_FILE -d $HOME/Library/Android/sdk/cmdline-tools
|
||||||
|
# Command line tools need to be placed in $HOME/Library/Android/sdk/cmdline-tools/latest to function properly
|
||||||
|
mv $HOME/Library/Android/sdk/cmdline-tools/cmdline-tools $HOME/Library/Android/sdk/cmdline-tools/latest
|
||||||
|
rm -f $ANDROID_OSX_SDK_FILE
|
||||||
|
|
||||||
echo ANDROID_HOME is $ANDROID_HOME
|
echo ANDROID_HOME is $ANDROID_HOME
|
||||||
mv tools $ANDROID_HOME
|
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest:$ANDROID_HOME/cmdline-tools/latest/bin
|
||||||
|
|
||||||
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin
|
SDKMANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager
|
||||||
|
|
||||||
SDKMANAGER=$ANDROID_HOME/tools/bin/sdkmanager
|
|
||||||
|
|
||||||
# Mark the different Android licenses as accepted
|
|
||||||
mkdir -p $ANDROID_HOME/licenses
|
|
||||||
echo "8933bad161af4178b1185d1a37fbf41ea5269c55
|
|
||||||
d56f5187479451eabf01fb78af6dfcb131a6481e" >> $ANDROID_HOME/licenses/android-sdk-license
|
|
||||||
echo "84831b9409646a918e30573bab4c9c91346d8abd" >> $ANDROID_HOME/licenses/android-sdk-preview-license
|
|
||||||
|
|
||||||
echo "Installing latest tools & platform tools..."
|
echo "Installing latest tools & platform tools..."
|
||||||
echo y | $SDKMANAGER "tools" "platform-tools"
|
echo y | $SDKMANAGER "tools" "platform-tools"
|
||||||
@@ -80,14 +69,14 @@ ln -s $ANDROID_HOME/ndk/$ndkLtsLatest $ANDROID_HOME/ndk-bundle
|
|||||||
ANDROID_NDK_LATEST_HOME=$ANDROID_HOME/ndk/$ndkLatest
|
ANDROID_NDK_LATEST_HOME=$ANDROID_HOME/ndk/$ndkLatest
|
||||||
echo "export ANDROID_NDK_LATEST_HOME=$ANDROID_NDK_LATEST_HOME" >> "${HOME}/.bashrc"
|
echo "export ANDROID_NDK_LATEST_HOME=$ANDROID_NDK_LATEST_HOME" >> "${HOME}/.bashrc"
|
||||||
|
|
||||||
availablePlatforms=($(${ANDROID_HOME}/tools/bin/sdkmanager --list | grep "platforms;android-" | cut -d"|" -f 1 | sort -u))
|
availablePlatforms=($($SDKMANAGER --list | grep "platforms;android-" | cut -d"|" -f 1 | sort -u))
|
||||||
filter_components_by_version $ANDROID_PLATFORM "${availablePlatforms[@]}"
|
filter_components_by_version $ANDROID_PLATFORM "${availablePlatforms[@]}"
|
||||||
|
|
||||||
allBuildTools=($(${ANDROID_HOME}/tools/bin/sdkmanager --list --include_obsolete | grep "build-tools;" | cut -d"|" -f 1 | sort -u))
|
allBuildTools=($($SDKMANAGER --list --include_obsolete | grep "build-tools;" | cut -d"|" -f 1 | sort -u))
|
||||||
availableBuildTools=$(echo ${allBuildTools[@]//*rc[0-9]/})
|
availableBuildTools=$(echo ${allBuildTools[@]//*rc[0-9]/})
|
||||||
filter_components_by_version $ANDROID_BUILD_TOOL "${availableBuildTools[@]}"
|
filter_components_by_version $ANDROID_BUILD_TOOL "${availableBuildTools[@]}"
|
||||||
|
|
||||||
echo "y" | ${ANDROID_HOME}/tools/bin/sdkmanager ${components[@]}
|
echo "y" | $SDKMANAGER ${components[@]}
|
||||||
|
|
||||||
for extra_name in "${ANDROID_EXTRA_LIST[@]}"
|
for extra_name in "${ANDROID_EXTRA_LIST[@]}"
|
||||||
do
|
do
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ source ~/utils/utils.sh
|
|||||||
|
|
||||||
ANDROID_HOME=$HOME/Library/Android/sdk
|
ANDROID_HOME=$HOME/Library/Android/sdk
|
||||||
ANDROID_NDK_HOME=$ANDROID_HOME/ndk-bundle
|
ANDROID_NDK_HOME=$ANDROID_HOME/ndk-bundle
|
||||||
SDKMANAGER=$ANDROID_HOME/tools/bin/sdkmanager
|
SDKMANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager
|
||||||
|
|
||||||
# Android NDK v16 is not compatible with old Xamarin.Android SDK
|
# Android NDK v16 is not compatible with old Xamarin.Android SDK
|
||||||
# and fails builds with BundleAssemblies enabled
|
# and fails builds with BundleAssemblies enabled
|
||||||
|
|||||||
@@ -13,21 +13,13 @@ function Get-AndroidSDKRoot {
|
|||||||
|
|
||||||
function Get-AndroidSDKManagerPath {
|
function Get-AndroidSDKManagerPath {
|
||||||
$androidSDKDir = Get-AndroidSDKRoot
|
$androidSDKDir = Get-AndroidSDKRoot
|
||||||
return Join-Path $androidSDKDir "tools" "bin" "sdkmanager"
|
return Join-Path $androidSDKDir "cmdline-tools" "latest" "bin" "sdkmanager"
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-AndroidInstalledPackages {
|
function Get-AndroidInstalledPackages {
|
||||||
$androidSDKManagerPath = Get-AndroidSDKManagerPath
|
$androidSDKManagerPath = Get-AndroidSDKManagerPath
|
||||||
$androidSDKManagerList = Invoke-Expression "$androidSDKManagerPath --list --include_obsolete"
|
$androidSDKManagerList = Invoke-Expression "$androidSDKManagerPath --list_installed"
|
||||||
$androidInstalledPackages = @()
|
return $androidSDKManagerList
|
||||||
foreach($packageInfo in $androidSDKManagerList) {
|
|
||||||
if($packageInfo -Match "Available Packages:") {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
$androidInstalledPackages += $packageInfo
|
|
||||||
}
|
|
||||||
return $androidInstalledPackages
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-AndroidPackages {
|
function Get-AndroidPackages {
|
||||||
@@ -42,7 +34,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"
|
||||||
@@ -143,6 +135,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)]
|
||||||
|
|||||||
@@ -57,6 +57,23 @@ Describe "Android" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Context "SDKManagers" {
|
||||||
|
$testCases = @(
|
||||||
|
@{
|
||||||
|
PackageName = "SDK tools"
|
||||||
|
Sdkmanager = "$env:ANDROID_HOME/tools/bin/sdkmanager"
|
||||||
|
},
|
||||||
|
@{
|
||||||
|
PackageName = "Command-line tools"
|
||||||
|
Sdkmanager = "$env:ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
It "Sdkmanager from <PackageName> is available" -TestCases $testCases {
|
||||||
|
"$Sdkmanager --version" | Should -ReturnZeroExitCode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Context "Packages" {
|
Context "Packages" {
|
||||||
$testCases = $androidPackages | ForEach-Object { @{ PackageName = $_ } }
|
$testCases = $androidPackages | ForEach-Object { @{ PackageName = $_ } }
|
||||||
|
|
||||||
|
|||||||
@@ -212,8 +212,7 @@
|
|||||||
],
|
],
|
||||||
"additional-tools": [
|
"additional-tools": [
|
||||||
"cmake;3.10.2.4988404",
|
"cmake;3.10.2.4988404",
|
||||||
"cmake;3.18.1",
|
"cmake;3.18.1"
|
||||||
"cmdline-tools;latest"
|
|
||||||
],
|
],
|
||||||
"ndk": {
|
"ndk": {
|
||||||
"lts": "21",
|
"lts": "21",
|
||||||
|
|||||||
@@ -164,8 +164,7 @@
|
|||||||
],
|
],
|
||||||
"additional-tools": [
|
"additional-tools": [
|
||||||
"cmake;3.10.2.4988404",
|
"cmake;3.10.2.4988404",
|
||||||
"cmake;3.18.1",
|
"cmake;3.18.1"
|
||||||
"cmdline-tools;latest"
|
|
||||||
],
|
],
|
||||||
"ndk": {
|
"ndk": {
|
||||||
"lts": "21",
|
"lts": "21",
|
||||||
|
|||||||
@@ -112,8 +112,7 @@
|
|||||||
"addon-list": [],
|
"addon-list": [],
|
||||||
"additional-tools": [
|
"additional-tools": [
|
||||||
"cmake;3.10.2.4988404",
|
"cmake;3.10.2.4988404",
|
||||||
"cmake;3.18.1",
|
"cmake;3.18.1"
|
||||||
"cmdline-tools;latest"
|
|
||||||
],
|
],
|
||||||
"ndk": {
|
"ndk": {
|
||||||
"lts": "21",
|
"lts": "21",
|
||||||
|
|||||||
Reference in New Issue
Block a user