diff --git a/images/macos/provision/core/android-toolsets.sh b/images/macos/provision/core/android-toolsets.sh
index 5a08278b..ac9c6d03 100755
--- a/images/macos/provision/core/android-toolsets.sh
+++ b/images/macos/provision/core/android-toolsets.sh
@@ -33,38 +33,27 @@ ANDROID_ADDON_LIST=($(get_toolset_value '.android."addon-list"[]'))
ANDROID_ADDITIONAL_TOOLS=($(get_toolset_value '.android."additional-tools"[]'))
ANDROID_NDK_MAJOR_LTS=($(get_toolset_value '.android.ndk.lts'))
ANDROID_NDK_MAJOR_LATEST=($(get_toolset_value '.android.ndk.latest'))
-# Get the latest command line tools from https://developer.android.com/studio/index.html
-# Release note: https://developer.android.com/studio/releases/sdk-tools.html
-ANDROID_OSX_SDK_LOCATION="https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip"
+# Get the latest command line tools from https://developer.android.com/studio#cmdline-tools
+ANDROID_OSX_SDK_URL="https://dl.google.com/android/repository/commandlinetools-mac-7302050_latest.zip"
ANDROID_HOME=$HOME/Library/Android/sdk
ANDROID_OSX_SDK_FILE=tools-macosx.zip
pushd $HOME
-# Prevent the warning of sdkmanager
-mkdir $HOME/.android
-echo "count=0" >> $HOME/.android/repositories.cfg
+echo "Downloading android command line tools..."
+download_with_retries $ANDROID_OSX_SDK_URL "." $ANDROID_OSX_SDK_FILE
-echo "Downloading android sdk..."
-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
+echo "Uncompressing android command line tools..."
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
-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/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
+SDKMANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager
echo "Installing latest 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
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[@]}"
-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]/})
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[@]}"
do
diff --git a/images/macos/provision/core/xamarin-android-ndk.sh b/images/macos/provision/core/xamarin-android-ndk.sh
index 0254643e..82896b46 100644
--- a/images/macos/provision/core/xamarin-android-ndk.sh
+++ b/images/macos/provision/core/xamarin-android-ndk.sh
@@ -3,7 +3,7 @@ source ~/utils/utils.sh
ANDROID_HOME=$HOME/Library/Android/sdk
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
# and fails builds with BundleAssemblies enabled
diff --git a/images/macos/software-report/SoftwareReport.Android.psm1 b/images/macos/software-report/SoftwareReport.Android.psm1
index db5955d2..9be1d78a 100644
--- a/images/macos/software-report/SoftwareReport.Android.psm1
+++ b/images/macos/software-report/SoftwareReport.Android.psm1
@@ -13,21 +13,13 @@ function Get-AndroidSDKRoot {
function Get-AndroidSDKManagerPath {
$androidSDKDir = Get-AndroidSDKRoot
- return Join-Path $androidSDKDir "tools" "bin" "sdkmanager"
+ return Join-Path $androidSDKDir "cmdline-tools" "latest" "bin" "sdkmanager"
}
function Get-AndroidInstalledPackages {
$androidSDKManagerPath = Get-AndroidSDKManagerPath
- $androidSDKManagerList = Invoke-Expression "$androidSDKManagerPath --list --include_obsolete"
- $androidInstalledPackages = @()
- foreach($packageInfo in $androidSDKManagerList) {
- if($packageInfo -Match "Available Packages:") {
- break
- }
-
- $androidInstalledPackages += $packageInfo
- }
- return $androidInstalledPackages
+ $androidSDKManagerList = Invoke-Expression "$androidSDKManagerPath --list_installed"
+ return $androidSDKManagerList
}
function Get-AndroidPackages {
@@ -42,7 +34,7 @@ function Build-AndroidTable {
return @(
@{
"Package" = "Android Command Line Tools"
- "Version" = Get-AndroidPackageVersions -PackageInfo $packageInfo -MatchedString "Android SDK Command-line Tools"
+ "Version" = Get-AndroidCommandLineToolsVersion
},
@{
"Package" = "Android Emulator"
@@ -143,6 +135,13 @@ function Get-AndroidPlatformVersions {
return ($versions -Join "
")
}
+function Get-AndroidCommandLineToolsVersion {
+ $commandLineTools = Get-AndroidSDKManagerPath
+ (& $commandLineTools --version | Out-String).Trim() -match "(?^(\d+\.){1,}\d+$)" | Out-Null
+ $commandLineToolsVersion = $Matches.Version
+ return $commandLineToolsVersion
+}
+
function Get-AndroidBuildToolVersions {
param (
[Parameter(Mandatory)]
diff --git a/images/macos/tests/Android.Tests.ps1 b/images/macos/tests/Android.Tests.ps1
index c14c89f2..02fe6543 100644
--- a/images/macos/tests/Android.Tests.ps1
+++ b/images/macos/tests/Android.Tests.ps1
@@ -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 is available" -TestCases $testCases {
+ "$Sdkmanager --version" | Should -ReturnZeroExitCode
+ }
+ }
+
Context "Packages" {
$testCases = $androidPackages | ForEach-Object { @{ PackageName = $_ } }
diff --git a/images/macos/toolsets/toolset-10.14.json b/images/macos/toolsets/toolset-10.14.json
index bdc2cddd..72d34a68 100644
--- a/images/macos/toolsets/toolset-10.14.json
+++ b/images/macos/toolsets/toolset-10.14.json
@@ -212,8 +212,7 @@
],
"additional-tools": [
"cmake;3.10.2.4988404",
- "cmake;3.18.1",
- "cmdline-tools;latest"
+ "cmake;3.18.1"
],
"ndk": {
"lts": "21",
diff --git a/images/macos/toolsets/toolset-10.15.json b/images/macos/toolsets/toolset-10.15.json
index 0f760649..783cb28b 100644
--- a/images/macos/toolsets/toolset-10.15.json
+++ b/images/macos/toolsets/toolset-10.15.json
@@ -164,8 +164,7 @@
],
"additional-tools": [
"cmake;3.10.2.4988404",
- "cmake;3.18.1",
- "cmdline-tools;latest"
+ "cmake;3.18.1"
],
"ndk": {
"lts": "21",
diff --git a/images/macos/toolsets/toolset-11.json b/images/macos/toolsets/toolset-11.json
index aa705492..3058334b 100644
--- a/images/macos/toolsets/toolset-11.json
+++ b/images/macos/toolsets/toolset-11.json
@@ -112,8 +112,7 @@
"addon-list": [],
"additional-tools": [
"cmake;3.10.2.4988404",
- "cmake;3.18.1",
- "cmdline-tools;latest"
+ "cmake;3.18.1"
],
"ndk": {
"lts": "21",