Add improved AndroidNdk detection to handle versions folder in env var location and fallback to automatic
#2893
This commit is contained in:
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user