diff --git a/Source/Tools/Flax.Build/Platforms/Android/AndroidNdk.cs b/Source/Tools/Flax.Build/Platforms/Android/AndroidNdk.cs index 7cc8afce3..c85ac6cbe 100644 --- a/Source/Tools/Flax.Build/Platforms/Android/AndroidNdk.cs +++ b/Source/Tools/Flax.Build/Platforms/Android/AndroidNdk.cs @@ -34,23 +34,50 @@ namespace Flax.Build.Platforms // Find Android NDK folder path var sdkPath = Environment.GetEnvironmentVariable("ANDROID_NDK"); - if (string.IsNullOrEmpty(sdkPath)) + FindNDKVersion(sdkPath); + if (!IsValid) { - // Look for ndk installed side-by-side with an sdk - if (AndroidSdk.Instance.IsValid && Directory.Exists(Path.Combine(AndroidSdk.Instance.RootPath, "ndk"))) + if (!string.IsNullOrEmpty(sdkPath)) { - var subdirs = Directory.GetDirectories(Path.Combine(AndroidSdk.Instance.RootPath, "ndk")); - if (subdirs.Length != 0) - { - Utilities.SortVersionDirectories(subdirs); - sdkPath = subdirs.Last(); - } + Log.Warning(string.Format("Specified Android NDK folder in ANDROID_NDK env variable doesn't contain valid NDK ({0})", sdkPath)); + } + + // Look for ndk installed side-by-side with a sdk + if (AndroidSdk.Instance.IsValid) + { + sdkPath = Path.Combine(AndroidSdk.Instance.RootPath, "ndk"); + FindNDKVersion(sdkPath); } } - else if (!Directory.Exists(sdkPath)) + } + + private void FindNDKVersion(string folder) + { + // Skip if folder is invalid or missing + if (string.IsNullOrEmpty(folder) || !Directory.Exists(folder)) + return; + + // Check that explicit folder + FindNDK(folder); + if (IsValid) + return; + + // Check folders with versions + var subDirs = Directory.GetDirectories(folder); + if (subDirs.Length != 0) { - Log.Warning(string.Format("Specified Android NDK folder in ANDROID_NDK env variable doesn't exist ({0})", sdkPath)); + Utilities.SortVersionDirectories(subDirs); + FindNDK(subDirs.Last()); } + + if (!IsValid) + { + Log.Warning(string.Format("Failed to detect Android NDK version ({0})", folder)); + } + } + + private void FindNDK(string sdkPath) + { if (!string.IsNullOrEmpty(sdkPath) && Directory.Exists(sdkPath)) { var sourceProperties = Path.Combine(sdkPath, "source.properties"); @@ -72,15 +99,10 @@ namespace Flax.Build.Platforms Version = v; IsValid = true; } - else - { - Log.Warning(string.Format("Failed to detect Android NDK version ({0})", sdkPath)); - } } if (IsValid) { RootPath = sdkPath; - IsValid = true; Log.Info(string.Format("Found Android NDK {1} at {0}", RootPath, Version)); } }