Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/Xamarin.Android.Build.Tasks/Tasks/ResolveAndroidTooling.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,11 +90,17 @@ public override bool RunTask ()
AndroidApiLevel = GetMaxStableApiLevel ().ToString ();
}

var androidSdk = MonoAndroidHelper.AndroidSdk;
if (androidSdk == null || AndroidSdkPath.IsNullOrEmpty ()) {
Log.LogCodedError ("XA5300", Properties.Resources.XA5300_Android_SDK);
return false;
}

string toolsZipAlignPath = Path.Combine (AndroidSdkPath, "tools", ZipAlign);
bool findZipAlign = (ZipAlignPath.IsNullOrEmpty () || !Directory.Exists (ZipAlignPath)) && !File.Exists (toolsZipAlignPath);

var lintPaths = MonoAndroidHelper.AndroidSdk.GetCommandLineToolsPaths (CommandLineToolsVersion ?? "")
.SelectMany (p => new[]{
var lintPaths = androidSdk.GetCommandLineToolsPaths (CommandLineToolsVersion ?? "")
.SelectMany (p => new [] {
p,
Path.Combine (p, "bin"),
});
Expand All @@ -107,7 +113,7 @@ public override bool RunTask ()
}
}

foreach (var dir in MonoAndroidHelper.AndroidSdk.GetBuildToolsPaths (AndroidSdkBuildToolsVersion ?? "")) {
foreach (var dir in androidSdk.GetBuildToolsPaths (AndroidSdkBuildToolsVersion ?? "")) {
Log.LogDebugMessage ("Trying build-tools path: {0}", dir);
if (dir == null || !Directory.Exists (dir))
continue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,5 +219,36 @@ public void ResolveSdkTiming ()
Directory.Delete (Path.Combine (Root, path), recursive: true);
}

[Test]
public void ResolveAndroidToolingWithMissingResolvedSdkDoesNotThrow ()
{
var path = Path.Combine (Path.GetTempPath (), "xa-tests", nameof (ResolveAndroidToolingWithMissingResolvedSdkDoesNotThrow), Guid.NewGuid ().ToString ("N"));
Directory.CreateDirectory (path);
var errors = new List<BuildErrorEventArgs> ();
var originalAndroidSdk = MonoAndroidHelper.AndroidSdk;
try {
MonoAndroidHelper.AndroidSdk = null;
IBuildEngine engine = new MockBuildEngine (TestContext.Out, errors);
var androidTooling = new Xamarin.Android.Tasks.ResolveAndroidTooling {
BuildEngine = engine,
AndroidSdkPath = path,
AndroidSdkBuildToolsVersion = "36.0.0",
TargetPlatformVersion = "37.0",
AotAssemblies = false,
SequencePointsMode = "None",
AndroidApplication = true,
};

Assert.IsFalse (androidTooling.Execute (), "ResolveAndroidTooling should fail when SDK resolution has not succeeded.");
Assert.AreEqual ("37", androidTooling.AndroidApiLevel, "AndroidApiLevel should still be calculated for dependency resolution.");
Assert.IsTrue (errors.Any (e => e.Code == "XA5300"), "XA5300 should be logged when Android SDK tooling is unavailable.");
Assert.IsFalse (errors.Any (e => e.Code == "XARAT7001"), "ResolveAndroidTooling should not throw when AndroidSdk is unavailable.");
} finally {
MonoAndroidHelper.AndroidSdk = originalAndroidSdk;
if (Directory.Exists (path))
Directory.Delete (path, recursive: true);
}
}

}
}