From cc1c750dee56162fef606616d82051f1e4f80d1f Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Mon, 14 Aug 2017 14:06:56 +0100 Subject: [PATCH] [Xamarin.Android.Build.Tasks] SlidingMenuExample project now fails to build against 15.4 with dozens of javac errors 'package foo does not exist' Fixes https://bugzilla.xamarin.com/show_bug.cgi?id=58727 In commit 0667a2b6 we neglected to take into account that any embedded libraries or environment files would be deleted when the zip was extracted. Commit ea6b9b45 fixed the issue for the Environment files. This commit will fix the issue for the .jar files. We also added a new test so this doesn't happen in future. --- .../Tasks/ResolveLibraryProjectImports.cs | 11 ++++++++--- .../Xamarin.Android.Build.Tests/BindingBuildTest.cs | 7 ++++++- src/Xamarin.Android.Build.Tasks/Utilities/Files.cs | 5 +++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs index b7e433143d5..34d8f66deee 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs @@ -246,6 +246,7 @@ void Extract ( outfs.Write (data, 0, data.Length); updated = true; } + jars.Add (outjarFile); } // embedded AndroidResourceLibrary archive @@ -264,6 +265,8 @@ void Extract ( using (var zip = MonoAndroidHelper.ReadZipFile (finfo.FullName)) { updated |= Files.ExtractAll (zip, importsDir, modifyCallback: (entryFullName) => { return entryFullName.Replace ("library_project_imports/", ""); + }, deleteCallback: (fileToDelete) => { + return !jars.Contains (fileToDelete); }, forceUpdate: false); } @@ -292,10 +295,12 @@ void Extract ( stamp.Create ().Close (); } } - - foreach (var f in outdir.GetFiles ("*.jar") - .Select (fi => fi.FullName)) + foreach (var f in outdir.GetFiles ("*.jar", SearchOption.AllDirectories) + .Select (fi => fi.FullName)) { + if (jars.Contains (f)) + continue; jars.Add (f); + } } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 3627ea30ef5..4f5c9f6d245 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -1,4 +1,4 @@ -using System; +using System; using Xamarin.ProjectTools; using NUnit.Framework; using System.IO; @@ -274,6 +274,9 @@ public void BindingCheckHiddenFiles ([Values (true, false)] bool useShortFileNam binding.Jars.Add (new AndroidItem.LibraryProjectZip ("Jars\\mylibrary.aar") { WebContent = "https://www.dropbox.com/s/astiqp8jo97x91h/mylibrary.aar?dl=1" }); + binding.Jars.Add (new AndroidItem.EmbeddedJar ("Jars\\svg-android.jar") { + WebContent = "https://www.dropbox.com/s/5ovudccigydohys/javaBindingIssue.jar?dl=1" + }); binding.SetProperty (binding.ActiveConfigurationProperties, "UseShortFileNames", useShortFileNames); using (var bindingBuilder = CreateDllBuilder (Path.Combine ("temp", "BindingCheckHiddenFiles", "Binding"))) { bindingBuilder.Verbosity = Microsoft.Build.Framework.LoggerVerbosity.Diagnostic; @@ -304,6 +307,8 @@ public void BindingCheckHiddenFiles ([Values (true, false)] bool useShortFileNam Path.Combine (dsStorePath, ".DS_Store")); var _macOSStorePath = Path.Combine (dsStorePath, "_MACOSX"); Assert.IsFalse (Directory.Exists (_macOSStorePath), "{0} should NOT exist.", _macOSStorePath); + var svgJar = Path.Combine (dsStorePath, "svg-android.jar"); + Assert.IsTrue (File.Exists (svgJar), $"{svgJar} should exist."); } } } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs b/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs index bcd14fd5398..108450ff848 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs @@ -201,7 +201,8 @@ public static ZipArchive ReadZipFile (string filename, bool strictConsistencyChe return ZipArchive.Open (filename, FileMode.Open, strictConsistencyChecks: strictConsistencyChecks); } - public static bool ExtractAll(ZipArchive zip, string destination, Action progressCallback = null, Func modifyCallback = null, bool forceUpdate = true) + public static bool ExtractAll(ZipArchive zip, string destination, Action progressCallback = null, Func modifyCallback = null, + Func deleteCallback = null, bool forceUpdate = true) { int i = 0; int total = (int)zip.EntryCount; @@ -235,7 +236,7 @@ public static bool ExtractAll(ZipArchive zip, string destination, Action