diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs index 59fc390..b39b75f 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs @@ -152,7 +152,7 @@ protected virtual IEnumerable GetAllAvailableAndroidNdks () // Look in PATH foreach (var ndkStack in ProcessUtils.FindExecutablesInPath (NdkStack)) { var ndkDir = Path.GetDirectoryName (ndkStack); - if (ndkDir == null) + if (string.IsNullOrEmpty (ndkDir)) continue; yield return ndkDir; } @@ -161,12 +161,19 @@ protected virtual IEnumerable GetAllAvailableAndroidNdks () foreach (var sdk in GetAllAvailableAndroidSdks ()) { if (sdk == AndroidSdkPath) continue; - yield return FindBestNDK (sdk); + var ndkDir = FindBestNDK (sdk); + if (string.IsNullOrEmpty (ndkDir)) + continue; + yield return ndkDir; } } string FindBestNDK (string androidSdkPath) { + if (!Directory.Exists (androidSdkPath)) { + return String.Empty; + } + var ndkInstances = new SortedDictionary (Comparer.Create ((Version l, Version r) => r.CompareTo (l))); foreach (string ndkPath in Directory.EnumerateDirectories (androidSdkPath, "ndk*", SearchOption.TopDirectoryOnly)) { diff --git a/tests/Xamarin.Android.Tools.AndroidSdk-Tests/AndroidSdkInfoTests.cs b/tests/Xamarin.Android.Tools.AndroidSdk-Tests/AndroidSdkInfoTests.cs index 7efcaa2..54dc353 100644 --- a/tests/Xamarin.Android.Tools.AndroidSdk-Tests/AndroidSdkInfoTests.cs +++ b/tests/Xamarin.Android.Tools.AndroidSdk-Tests/AndroidSdkInfoTests.cs @@ -146,6 +146,28 @@ public void Ndk_PathInSdk() } } + [Test] + public void Ndk_AndroidSdkDoesNotExist () + { + CreateSdks (out string root, out string jdk, out string ndk, out string sdk); + + Action logger = (level, message) => { + Console.WriteLine ($"[{level}] {message}"); + if (level == TraceLevel.Error) + Assert.Fail (message); + }; + + var oldAndroidHome = Environment.GetEnvironmentVariable ("ANDROID_HOME"); + try { + Environment.SetEnvironmentVariable ("ANDROID_HOME", "/i/dont/exist"); + // Check that this doesn't throw + new AndroidSdkInfo (logger, androidSdkPath: sdk, androidNdkPath: null, javaSdkPath: jdk); + } finally { + Environment.SetEnvironmentVariable ("ANDROID_HOME", oldAndroidHome); + Directory.Delete (root, recursive: true); + } + } + [Test] public void Constructor_SetValuesFromPath () {