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",