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