Skip to content

[all OSs] Android ndk-bundle along with old NDK versions will be deprecated on July, 24 #5879

@miketimofeev

Description

@miketimofeev

Breaking changes

  • Symlink from LTS NDK to ndk-bundle won't be created anymore.
  • NDK version from 15 to 18 will be removed from macOS-10.15 image.

Target date

The propagation will start on July, 24 and take 2-3 days.

The motivation for the changes

  • ndk-bundle was explicitly marked as "Obsolete" by Google and no one should be using it anymore. The current symlink creation process breaks the Android SDK package manager. More details can be found here side-by-side NDK installed as the "(obsolete)" NDK #2689 (comment)
  • Old ndk versions 15-18 are not needed by xamarin-android anymore and can be deleted.

Possible impact

If your builds depend on the ndk-bundle symlink they can be broken.

Platforms affected

  • Azure DevOps
  • GitHub Actions

Virtual environments affected

  • Ubuntu 18.04
  • Ubuntu 20.04
  • Ubuntu 22.04
  • macOS 10.15
  • macOS 11
  • macOS 12
  • Windows Server 2019
  • Windows Server 2022

Mitigation ways

The symlink can be created using the following snippets:

  • macOS:
function get_full_ndk_version {
    majorVersion=$1
    ndkVersion=$(${SDKMANAGER} --list | grep "ndk;${majorVersion}.*" | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
    echo "$ndkVersion"
}
ANDROID_HOME=$HOME/Library/Android/sdk
SDKMANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager
ndkDefault=$(get_full_ndk_version "23")
ln -s $ANDROID_HOME/ndk/$ndkDefault $ANDROID_HOME/ndk-bundle
  • Ubuntu:
function get_full_ndk_version {
    majorVersion=$1
    ndkFullVersion=$($SDKMANAGER --list | grep "ndk;${majorVersion}.*" | awk '{gsub("ndk;", ""); print $1}' | sort -V | tail -n1)
    echo "$ndkFullVersion"
}
ANDROID_ROOT=/usr/local/lib/android
ANDROID_SDK_ROOT=${ANDROID_ROOT}/sdk
ANDROID_NDK_ROOT=${ANDROID_SDK_ROOT}/ndk-bundle
SDKMANAGER=${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager
ndkDefaultFullVersion=$(get_full_ndk_version "23")
ln -sf $ANDROID_SDK_ROOT/ndk/$ndkDefaultFullVersion $ANDROID_NDK_ROOT
  • Windows:
$sdkRoot = "C:\Android\android-sdk"
$sdkManager = "$sdkRoot\cmdline-tools\latest\bin\sdkmanager.bat"
$androidPackages = Get-AndroidPackages -AndroidSDKManagerPath $sdkManager
$ndkDefaultVersion = ($androidPackages | Where-Object { $_ -match "ndk;23" }).Split(';')[1]
$ndkRoot = "$sdkRoot\ndk-bundle"
New-Item -Path $ndkRoot -ItemType SymbolicLink -Value "$sdkRoot\ndk\$ndkDefaultVersion"
setx ANDROID_NDK_HOME $ndkRoot /M
setx ANDROID_NDK_PATH $ndkRoot /M
setx ANDROID_NDK_ROOT $ndkRoot /M
(Get-Content -Encoding UTF8 "${ndkRoot}\ndk-build.cmd").replace('%~dp0\build\ndk-build.cmd','"%~dp0\build\ndk-build.cmd"')|Set-Content -Encoding UTF8 "${ndkRoot}\ndk-build.cmd"

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions