Add improved AndroidNdk detection to handle versions folder in env var location and fallback to automatic

#2893
This commit is contained in:
Wojtek Figat
2025-02-27 15:34:29 +01:00
parent b2c8c4018c
commit bb35d9f811

View File

@@ -34,23 +34,50 @@ namespace Flax.Build.Platforms
// Find Android NDK folder path // Find Android NDK folder path
var sdkPath = Environment.GetEnvironmentVariable("ANDROID_NDK"); 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 (!string.IsNullOrEmpty(sdkPath))
if (AndroidSdk.Instance.IsValid && Directory.Exists(Path.Combine(AndroidSdk.Instance.RootPath, "ndk")))
{ {
var subdirs = Directory.GetDirectories(Path.Combine(AndroidSdk.Instance.RootPath, "ndk")); Log.Warning(string.Format("Specified Android NDK folder in ANDROID_NDK env variable doesn't contain valid NDK ({0})", sdkPath));
if (subdirs.Length != 0) }
{
Utilities.SortVersionDirectories(subdirs); // Look for ndk installed side-by-side with a sdk
sdkPath = subdirs.Last(); 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)) if (!string.IsNullOrEmpty(sdkPath) && Directory.Exists(sdkPath))
{ {
var sourceProperties = Path.Combine(sdkPath, "source.properties"); var sourceProperties = Path.Combine(sdkPath, "source.properties");
@@ -72,15 +99,10 @@ namespace Flax.Build.Platforms
Version = v; Version = v;
IsValid = true; IsValid = true;
} }
else
{
Log.Warning(string.Format("Failed to detect Android NDK version ({0})", sdkPath));
}
} }
if (IsValid) if (IsValid)
{ {
RootPath = sdkPath; RootPath = sdkPath;
IsValid = true;
Log.Info(string.Format("Found Android NDK {1} at {0}", RootPath, Version)); Log.Info(string.Format("Found Android NDK {1} at {0}", RootPath, Version));
} }
} }