diff --git a/images/linux/scripts/SoftwareReport/SoftwareReport.Android.psm1 b/images/linux/scripts/SoftwareReport/SoftwareReport.Android.psm1
index 287cca728..3a0e6b2f2 100644
--- a/images/linux/scripts/SoftwareReport/SoftwareReport.Android.psm1
+++ b/images/linux/scripts/SoftwareReport/SoftwareReport.Android.psm1
@@ -11,21 +11,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 --include_obsolete"
+ return $androidSDKManagerList
}
@@ -34,7 +26,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"
@@ -123,6 +115,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/linux/scripts/helpers/Common.Helpers.psm1 b/images/linux/scripts/helpers/Common.Helpers.psm1
index 04a79c46c..5dd17c60d 100644
--- a/images/linux/scripts/helpers/Common.Helpers.psm1
+++ b/images/linux/scripts/helpers/Common.Helpers.psm1
@@ -56,7 +56,7 @@ function Get-ToolsetValue {
}
function Get-AndroidPackages {
- $androidSDKManagerPath = "/usr/local/lib/android/sdk/tools/bin/sdkmanager"
+ $androidSDKManagerPath = "/usr/local/lib/android/sdk/cmdline-tools/latest/bin/sdkmanager"
$androidPackages = & $androidSDKManagerPath --list --verbose
return $androidPackages
}
diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh
index af2a218ce..7e0c547c0 100644
--- a/images/linux/scripts/installers/android.sh
+++ b/images/linux/scripts/installers/android.sh
@@ -7,6 +7,7 @@
# Source the helpers for use with the script
source $HELPER_SCRIPTS/os.sh
source $HELPER_SCRIPTS/install.sh
+source $HELPER_SCRIPTS/etc-environment.sh
function filter_components_by_version {
minimumVersion=$1
@@ -26,9 +27,7 @@ function filter_components_by_version {
function get_full_ndk_version {
majorVersion=$1
-
ndkFullVersion=$($SDKMANAGER --list | grep "ndk;${majorVersion}.*" | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
-
echo "$ndkFullVersion"
}
@@ -36,7 +35,7 @@ function get_full_ndk_version {
ANDROID_ROOT=/usr/local/lib/android
ANDROID_SDK_ROOT=${ANDROID_ROOT}/sdk
ANDROID_NDK_ROOT=${ANDROID_SDK_ROOT}/ndk-bundle
-SDKMANAGER=${ANDROID_SDK_ROOT}/tools/bin/sdkmanager
+SDKMANAGER=${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager
echo "ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" | tee -a /etc/environment
# ANDROID_HOME is deprecated, but older versions of Gradle rely on it
@@ -51,14 +50,12 @@ mkdir -p ${ANDROID_SDK_ROOT}
# Download the latest command line tools so that we can accept all of the licenses.
# See https://developer.android.com/studio/#command-tools
-download_with_retries https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip "." android-sdk.zip
-unzip -qq android-sdk.zip -d ${ANDROID_SDK_ROOT}
-rm -f android-sdk.zip
-
-if isUbuntu20 ; then
- # Sdk manager doesn't work with Java > 8, set version 8 explicitly
- sed -i "2i export JAVA_HOME=${JAVA_HOME_8_X64}" "$SDKMANAGER"
-fi
+cmdlineTools="android-cmdline-tools.zip"
+download_with_retries https://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip "." $cmdlineTools
+unzip -qq $cmdlineTools -d ${ANDROID_SDK_ROOT}/cmdline-tools
+# Command line tools need to be placed in ${ANDROID_SDK_ROOT}/sdk/cmdline-tools/latest to determine SDK root
+mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest
+rm -f $cmdlineTools
# Check sdk manager installation
${SDKMANAGER} --list 1>/dev/null
@@ -79,9 +76,9 @@ ANDROID_NDK_MAJOR_LTS=($(get_toolset_value '.android.ndk.lts'))
ndkLTSFullVersion=$(get_full_ndk_version $ANDROID_NDK_MAJOR_LTS)
components=("${extras[@]}" "${addons[@]}" "${additional[@]}" "ndk;$ndkLTSFullVersion")
-if isUbuntu20 ; then
+if isUbuntu20; then
ANDROID_NDK_MAJOR_LATEST=($(get_toolset_value '.android.ndk.latest'))
- ndkLatestFullVersion=$(get_full_ndk_version $ANDROID_NDK_MAJOR_LATEST)
+ ndkLatestFullVersion=$(get_full_ndk_version $ANDROID_NDK_MAJOR_LATEST)
components+=("ndk;$ndkLatestFullVersion")
fi
@@ -103,7 +100,13 @@ filter_components_by_version $minimumBuildToolVersion "${availableBuildTools[@]}
echo "y" | $SDKMANAGER ${components[@]}
+# Old skdmanager from sdk tools doesn't work with Java > 8, set version 8 explicitly
+if isUbuntu20; then
+ sed -i "2i export JAVA_HOME=${JAVA_HOME_8_X64}" ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager
+fi
+
# Add required permissions
chmod -R a+rwx ${ANDROID_SDK_ROOT}
+reloadEtcEnvironment
invoke_tests "Android"
diff --git a/images/linux/scripts/tests/Android.Tests.ps1 b/images/linux/scripts/tests/Android.Tests.ps1
index 0069c9e1c..11b18d122 100644
--- a/images/linux/scripts/tests/Android.Tests.ps1
+++ b/images/linux/scripts/tests/Android.Tests.ps1
@@ -32,8 +32,6 @@ Describe "Android" {
$androidPackages = $androidPackages | ForEach-Object { $_ }
BeforeAll {
- $ANDROID_SDK_DIR = "/usr/local/lib/android/sdk"
-
function Validate-AndroidPackage {
param (
[Parameter(Mandatory=$true)]
@@ -45,11 +43,28 @@ Describe "Android" {
# 'cmake;3.6.4111459' -> 'cmake/3.6.4111459'
# 'patcher;v4' -> 'patcher/v4'
$PackageName = $PackageName.Replace(";", "/")
- $targetPath = Join-Path $ANDROID_SDK_DIR $PackageName
+ $targetPath = Join-Path $env:ANDROID_HOME $PackageName
$targetPath | Should -Exist
}
}
+ 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/linux/toolsets/toolset-1604.json b/images/linux/toolsets/toolset-1604.json
index 90450b264..613d04897 100644
--- a/images/linux/toolsets/toolset-1604.json
+++ b/images/linux/toolsets/toolset-1604.json
@@ -96,9 +96,7 @@
"additional_tools": [
"cmake;3.10.2.4988404",
"cmake;3.18.1",
- "patcher;v4",
- "platform-tools",
- "cmdline-tools;latest"
+ "platform-tools"
],
"ndk": {
"lts": "21"
diff --git a/images/linux/toolsets/toolset-1804.json b/images/linux/toolsets/toolset-1804.json
index 174e2f9fa..90570f463 100644
--- a/images/linux/toolsets/toolset-1804.json
+++ b/images/linux/toolsets/toolset-1804.json
@@ -92,9 +92,7 @@
"additional_tools": [
"cmake;3.10.2.4988404",
"cmake;3.18.1",
- "patcher;v4",
- "platform-tools",
- "cmdline-tools;latest"
+ "platform-tools"
],
"ndk": {
"lts": "21"
diff --git a/images/linux/toolsets/toolset-2004.json b/images/linux/toolsets/toolset-2004.json
index 8d4ef4c3d..7823e26f0 100644
--- a/images/linux/toolsets/toolset-2004.json
+++ b/images/linux/toolsets/toolset-2004.json
@@ -88,9 +88,7 @@
"additional_tools": [
"cmake;3.10.2.4988404",
"cmake;3.18.1",
- "patcher;v4",
- "platform-tools",
- "cmdline-tools;latest"
+ "platform-tools"
],
"ndk": {
"lts": "21",