From f047df67104d75f96c02126522c3d5eb10dec06b Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Thu, 9 Jun 2016 19:09:05 +0100 Subject: [PATCH] [Xamarin.Android.Build.Tasks] Fix issues with Library Resource Extraction Since the switch to System.IO.Compression we have a few issues when dealing with resource extraction. 1) It was not ignoring __MACOSX or .DS_Store during extraction. 2) It was not correctly detecting duplicate zip entries. This commit updates the code to correctly filter __MACOSX and .DS_Store entries. It also changes the way we check if an entry exists in the zip already. And finally it updates ResolveLibraryProjectImports to use the Files.ExtractAll method. This is because the standard ZipFile.ExtractToDirectory has no way of filtering the output (so it includes __MACOSX and .DS_Store). --- .../Tasks/ResolveLibraryProjectImports.cs | 3 ++- src/Xamarin.Android.Build.Tasks/Utilities/Files.cs | 7 ++++--- .../Utilities/ZipArchiveExtensions.cs | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs index 277ccfbd5be..cb30333484f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ResolveLibraryProjectImports.cs @@ -232,7 +232,8 @@ void Extract ( // temporarily extracted directory will look like: // __library_projects__/[dllname]/[library_project_imports | jlibs]/bin - ZipFile.ExtractToDirectory (finfo.FullName, outDirForDll); + using (var zip = MonoAndroidHelper.ReadZipFile (finfo.FullName)) + Files.ExtractAll (zip, outDirForDll); // We used to *copy* the resources to overwrite other resources, // which resulted in missing resource issue. diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs b/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs index 140b56a75dc..2410688a5f4 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/Files.cs @@ -198,9 +198,9 @@ public static void ExtractAll(ZipArchive zip, string destination, Action fileNa public static bool ContainsEntry (this ZipArchive archive, string entryName) { - return archive.Entries.Any (x => string.Compare (x.Name, entryName, StringComparison.OrdinalIgnoreCase) == 0); + return archive.Entries.Any (x => string.Compare (x.FullName, entryName, StringComparison.OrdinalIgnoreCase) == 0); } public static bool IsDirectory (this ZipArchiveEntry entry)