diff --git a/images/linux/scripts/installers/android.sh b/images/linux/scripts/installers/android.sh index 132f0336c..91d5e072c 100644 --- a/images/linux/scripts/installers/android.sh +++ b/images/linux/scripts/installers/android.sh @@ -24,10 +24,19 @@ function filter_components_by_version { done } +function get_full_ndk_version { + majorVersion=$1 + + ndkFullVersion=$($SDKMANAGER --list | grep "ndk;${majorVersion}.*" | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1) + + echo "$ndkFullVersion" +} + # Set env variable for SDK Root (https://developer.android.com/studio/command-line/variables) 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 echo "ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}" | tee -a /etc/environment # ANDROID_HOME is deprecated, but older versions of Gradle rely on it @@ -48,11 +57,11 @@ 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}" /usr/local/lib/android/sdk/tools/bin/sdkmanager + sed -i "2i export JAVA_HOME=${JAVA_HOME_8_X64}" "$SDKMANAGER" fi # Check sdk manager installation -/usr/local/lib/android/sdk/tools/bin/sdkmanager --list 1>/dev/null +${SDKMANAGER} --list 1>/dev/null if [ $? -eq 0 ] then echo "Android SDK manager was installed" @@ -66,23 +75,33 @@ minimumPlatformVersion=$(get_toolset_value '.android.platform_min_version') extras=$(get_toolset_value '.android.extra_list[]|"extras;" + .') addons=$(get_toolset_value '.android.addon_list[]|"add-ons;" + .') additional=$(get_toolset_value '.android.additional_tools[]') +ANDROID_NDK_MAJOR_LTS=($(get_toolset_value '.android.ndk.lts')) +ndkLTSFullVersion=$(get_full_ndk_version $ANDROID_NDK_MAJOR_LTS) -# Install the following SDKs and build tools, passing in "y" to accept licenses. -components=( "${extras[@]}" "${addons[@]}" "${additional[@]}" ) +components=("${extras[@]}" "${addons[@]}" "${additional[@]}" "ndk;$ndkLTSFullVersion") +if isUbuntu20 ; then + ANDROID_NDK_MAJOR_LATEST=($(get_toolset_value '.android.ndk.latest')) + ndkLatestFullVersion=$(get_full_ndk_version $ANDROID_NDK_MAJOR_LATEST) + components+=("ndk;$ndkLatestFullVersion") +fi # This changes were added due to incompatibility with android ndk-bundle (ndk;22.0.7026061). # Link issue virtual-environments: https://github.com/actions/virtual-environments/issues/2481 # Link issue xamarin-android: https://github.com/xamarin/xamarin-android/issues/5526 -ln -s $ANDROID_SDK_ROOT/ndk/21.3.6528147 $ANDROID_NDK_ROOT +ln -s $ANDROID_SDK_ROOT/ndk/$ndkLTSFullVersion $ANDROID_NDK_ROOT -availablePlatforms=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-" | cut -d"|" -f 1)) -allBuildTools=($(${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --list | grep "build-tools;" | cut -d"|" -f 1 | sort -u)) +if isUbuntu20; then + echo "ANDROID_NDK_LATEST_HOME=$ANDROID_SDK_ROOT/ndk/$ndkLatestFullVersion" | tee -a /etc/environment +fi + +availablePlatforms=($($SDKMANAGER --list | sed -n '/Available Packages:/,/^$/p' | grep "platforms;android-" | cut -d"|" -f 1)) +allBuildTools=($($SDKMANAGER --list | grep "build-tools;" | cut -d"|" -f 1 | sort -u)) availableBuildTools=$(echo ${allBuildTools[@]//*rc[0-9]/}) filter_components_by_version $minimumPlatformVersion "${availablePlatforms[@]}" filter_components_by_version $minimumBuildToolVersion "${availableBuildTools[@]}" -echo "y" | ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager ${components[@]} +echo "y" | $SDKMANAGER ${components[@]} # Add required permissions chmod -R a+rwx ${ANDROID_SDK_ROOT} diff --git a/images/linux/scripts/tests/Android.Tests.ps1 b/images/linux/scripts/tests/Android.Tests.ps1 index c1c89f0a1..3097e2b9f 100644 --- a/images/linux/scripts/tests/Android.Tests.ps1 +++ b/images/linux/scripts/tests/Android.Tests.ps1 @@ -2,6 +2,8 @@ Describe "Android" { $androidSdkManagerPackages = Get-AndroidPackages [int]$platformMinVersion = Get-ToolsetValue "android.platform_min_version" [version]$buildToolsMinVersion = Get-ToolsetValue "android.build_tools_min_version" + [string]$ndkLTSVersion = Get-ToolsetValue "android.ndk.lts" + $ndkLTSFullVersion = (Get-ChildItem "/usr/local/lib/android/sdk/ndk/$ndkLTSVersion.*" | Select-Object -Last 1).Name $platforms = (($androidSdkManagerPackages | Where-Object { "$_".StartsWith("platforms;") }) -replace 'platforms;', '' | Where-Object { [int]$_.Split("-")[1] -ge $platformMinVersion } | Sort-Object { [int]$_.Split("-")[1] } -Unique | @@ -16,8 +18,17 @@ Describe "Android" { $buildTools, (Get-ToolsetValue "android.extra_list" | ForEach-Object { "extras/${_}" }), (Get-ToolsetValue "android.addon_list" | ForEach-Object { "add-ons/${_}" }), - (Get-ToolsetValue "android.additional_tools" | ForEach-Object { "${_}" }) - ) | ForEach-Object { $_ } + (Get-ToolsetValue "android.additional_tools" | ForEach-Object { "${_}" }), + "ndk/$ndkLTSFullVersion" + ) + + [string]$ndkLatestVersion = Get-ToolsetValue "android.ndk.latest" + if ($ndkLatestVersion) { + $ndkLatestFullVersion = (Get-ChildItem "/usr/local/lib/android/sdk/ndk/$ndkLatestVersion.*" | Select-Object -Last 1).Name + $androidPackages += @("ndk/$ndkLatestFullVersion") + } + + $androidPackages = $androidPackages | ForEach-Object { $_ } BeforeAll { $ANDROID_SDK_DIR = "/usr/local/lib/android/sdk" @@ -38,7 +49,6 @@ Describe "Android" { } } - Context "Packages" { $testCases = $androidPackages | ForEach-Object { @{ PackageName = $_ } } diff --git a/images/linux/toolsets/toolset-1604.json b/images/linux/toolsets/toolset-1604.json index 22ef6aa95..9dcf5f464 100644 --- a/images/linux/toolsets/toolset-1604.json +++ b/images/linux/toolsets/toolset-1604.json @@ -106,10 +106,12 @@ "cmake;3.6.4111459", "cmake;3.10.2.4988404", "patcher;v4", - "ndk;21.3.6528147", "platform-tools", "cmdline-tools;latest" - ] + ], + "ndk": { + "lts": "21" + } }, "powershellModules": [ {"name": "MarkdownPS"}, diff --git a/images/linux/toolsets/toolset-1804.json b/images/linux/toolsets/toolset-1804.json index 09364313c..e71c96b81 100644 --- a/images/linux/toolsets/toolset-1804.json +++ b/images/linux/toolsets/toolset-1804.json @@ -102,10 +102,12 @@ "cmake;3.6.4111459", "cmake;3.10.2.4988404", "patcher;v4", - "ndk;21.3.6528147", "platform-tools", "cmdline-tools;latest" - ] + ], + "ndk": { + "lts": "21" + } }, "powershellModules": [ {"name": "MarkdownPS"}, diff --git a/images/linux/toolsets/toolset-2004.json b/images/linux/toolsets/toolset-2004.json index 900ed1728..7655703f0 100644 --- a/images/linux/toolsets/toolset-2004.json +++ b/images/linux/toolsets/toolset-2004.json @@ -85,10 +85,13 @@ "additional_tools": [ "cmake;3.10.2.4988404", "patcher;v4", - "ndk;21.3.6528147", "platform-tools", "cmdline-tools;latest" - ] + ], + "ndk": { + "lts": "21", + "latest": "22" + } }, "powershellModules": [ {"name": "MarkdownPS"},