From afe6f328e0c7571fa5852aa44cc7ac12f9eb8daa Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 10 Apr 2019 15:38:36 -0500 Subject: [PATCH] [Xamarin.Android.Build.Tasks] improvements I went through the `_GenerateJavaStubs` MSBuild target and the `` MSBuild task. There was an "easy" win to improve incremental build performance. I also made a few other general improvements to ``. ~~ Inputs & Outputs ~~ `_GenerateJavaStubs` has `Inputs` of: Inputs="$(MSBuildAllProjects);@(_ResolvedAssemblies);$(_AndroidManifestAbs);$(_AndroidBuildPropertiesCache);@(_AndroidResourceDest)" Lets say a NetStandard assembly changes, such as a XAML change in a Xamarin.Forms app. In this case `_GenerateJavaStubs` does not actually need to run again. We can use `@(_ResolvedUserMonoAndroidAssemblies)` as an input instead of `@(_ResolvedAssemblies)`. This is the biggest win--to skip this target completely. ~~ selectedWhitelistAssemblies ~~ `ManifestDocument` had the concept of a "whitelist" assembly, which currently consisted of a single assembly: internal static readonly string [] FrameworkAttributeLookupTargets = {"Mono.Android.GoogleMaps.dll"}; `Mono.Android.GoogleMaps.dll` no longer exists, so I was able to remove a bit of code that still used that dead codepath. ~~ Typemaps ~~ Just a couple minor improvements here: * Fixed the usage of the `[Obsolete]` constructor for `TypeNameMapGenerator`. Using a `(TaskLevel level, string value)` callback instead. * I reused the `MemoryStream` and got rid of the `UpdateWhenChanged` method. ~~ Tests ~~ I updated the `IncrementalBuildTest.ProduceReferenceAssembly` test quite a bit: * The library project using `$(ProduceReferenceAssembly)` is now a NetStandard library. * I check all the targets that should be skipped from now on. I made a few changes in `Xamarin.ProjectTools` to clean things up: * The `DotNetStandard` class should just define `Language=XamarinAndroidProjectLanguage.CSharp` by default. * Added a `ShouldRestorePackageReferences` property for deciding if we pass `/restore` or not. * The `DotNetStandard` class always needs to use `/restore`, even if there are no `PackageReferences`. * I moved a couple methods from `DotNetXamarinProject` to `XamarinProject` so the `DotNetStandard` has them. ~~ Results ~~ Testing the Xamarin.Forms project in this repo. A fresh build I wasn't able to see a noticeable improvement. *However*, an incremental build with XAML-change: Before: 861 ms _GenerateJavaStubs 1 calls After: n/a The target is skipped now: _GenerateJavaStubs: Skipping target "_GenerateJavaStubs" because all output files are up-to-date with respect to the input files. Overall this seems to be ~800ms better for incremental builds with XAML changes. --- .../Tasks/GenerateJavaStubs.cs | 34 ++++----- .../IncrementalBuildTest.cs | 8 ++- .../PackagingTest.cs | 1 - .../Common/DotNetStandard.cs | 6 +- .../Common/DotNetXamarinProject.cs | 11 --- .../Common/ProjectBuilder.cs | 2 +- .../Common/SolutionBuilder.cs | 2 +- .../Common/XamarinProject.cs | 12 ++++ .../Utilities/ManifestDocument.cs | 72 +++++++------------ .../Utilities/MonoAndroidHelper.cs | 2 - .../Xamarin.Android.Common.targets | 2 +- 11 files changed, 66 insertions(+), 86 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs index 3b942dcf563..f2a7dfe5525 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateJavaStubs.cs @@ -2,12 +2,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; -using System.Xml.Linq; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; -using MonoDroid.Utils; using Mono.Cecil; @@ -104,14 +103,9 @@ void Run (DirectoryAssemblyResolver res) res.SearchDirectories.Add (dir.ItemSpec); } - var selectedWhitelistAssemblies = new List (); - // Put every assembly we'll need in the resolver foreach (var assembly in ResolvedAssemblies) { - var assemblyFullPath = Path.GetFullPath (assembly.ItemSpec); - res.Load (assemblyFullPath); - if (MonoAndroidHelper.FrameworkAttributeLookupTargets.Any (a => Path.GetFileName (assembly.ItemSpec) == a)) - selectedWhitelistAssemblies.Add (assemblyFullPath); + res.Load (assembly.ItemSpec); } // However we only want to look for JLO types in user code @@ -234,7 +228,7 @@ void Run (DirectoryAssemblyResolver res) manifest.NeedsInternet = NeedsInternet; manifest.InstantRunEnabled = InstantRunEnabled; - var additionalProviders = manifest.Merge (all_java_types, selectedWhitelistAssemblies, ApplicationJavaClass, EmbedAssemblies, BundledWearApplicationName, MergedManifestDocuments); + var additionalProviders = manifest.Merge (all_java_types, ApplicationJavaClass, EmbedAssemblies, BundledWearApplicationName, MergedManifestDocuments); using (var stream = new MemoryStream ()) { manifest.Save (stream); @@ -287,19 +281,17 @@ void SaveResource (string resource, string filename, string destDir, Func types) { - using (var gen = UseSharedRuntime - ? new TypeNameMapGenerator (types, Log.LogDebugMessage) - : new TypeNameMapGenerator (ResolvedAssemblies.Select (p => p.ItemSpec), Log.LogDebugMessage)) { - UpdateWhenChanged (Path.Combine (OutputDirectory, "typemap.jm"), gen.WriteJavaToManaged); - UpdateWhenChanged (Path.Combine (OutputDirectory, "typemap.mj"), gen.WriteManagedToJava); - } - } - - void UpdateWhenChanged (string path, Action generator) - { + void logger (TraceLevel level, string value) => Log.LogDebugMessage (value); + TypeNameMapGenerator createTypeMapGenerator () => UseSharedRuntime ? + new TypeNameMapGenerator (types, logger) : + new TypeNameMapGenerator (ResolvedAssemblies.Select (p => p.ItemSpec), logger); + using (var gen = createTypeMapGenerator ()) using (var stream = new MemoryStream ()) { - generator (stream); - MonoAndroidHelper.CopyIfStreamChanged (stream, path); + gen.WriteJavaToManaged (stream); + MonoAndroidHelper.CopyIfStreamChanged (stream, Path.Combine (OutputDirectory, "typemap.jm")); + stream.SetLength (0); //Reuse the stream + gen.WriteManagedToJava (stream); + MonoAndroidHelper.CopyIfStreamChanged (stream, Path.Combine (OutputDirectory, "typemap.mj")); } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs index e56ed645061..516808375d7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs @@ -481,8 +481,10 @@ public void ProduceReferenceAssembly () app.SetProperty ("AndroidUseSharedRuntime", false.ToString ()); int count = 0; - var lib = new XamarinAndroidLibraryProject { + var lib = new DotNetStandard { ProjectName = "MyLibrary", + Sdk = "Microsoft.NET.Sdk", + TargetFramework = "netstandard2.0", Sources = { new BuildItem.Source ("Bar.cs") { TextContent = () => "public class Bar { public Bar () { System.Console.WriteLine (" + count++ + "); } }" @@ -503,8 +505,10 @@ public void ProduceReferenceAssembly () Assert.IsTrue (appBuilder.Build (app, doNotCleanupOnUpdate: true, saveProject: false), "second app build should have succeeded."); var targetsShouldSkip = new [] { - //TODO: perhaps more targets will skip here eventually? "CoreCompile", + "_BuildLibraryImportsCache", + "_ResolveLibraryProjectImports", + "_GenerateJavaStubs", }; foreach (var target in targetsShouldSkip) { Assert.IsTrue (appBuilder.Output.IsTargetSkipped (target), $"`{target}` should be skipped!"); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index 577f1430fcc..1abcc2b707e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -341,7 +341,6 @@ public void CheckAppBundle ([Values (true, false)] bool isRelease) public void NetStandardReferenceTest () { var netStandardProject = new DotNetStandard () { - Language = XamarinAndroidProjectLanguage.CSharp, ProjectName = "XamFormsSample", ProjectGuid = Guid.NewGuid ().ToString (), Sdk = "Microsoft.NET.Sdk", diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs index f9efd35a92b..0f08c79acd1 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs @@ -7,7 +7,6 @@ namespace Xamarin.ProjectTools { public class DotNetStandard : XamarinProject { - public override string ProjectTypeGuid { get { return string.Empty; @@ -20,7 +19,12 @@ public DotNetStandard () OtherBuildItems = new List (); SetProperty (CommonProperties, "DebugType", "full"); ItemGroupList.Add (Sources); + Language = XamarinAndroidProjectLanguage.CSharp; } + + // NetStandard projects always need to restore + public override bool ShouldRestorePackageReferences => true; + public string PackageTargetFallback { get { return GetProperty ("PackageTargetFallback"); } set { SetProperty ("PackageTargetFallback", value); } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs index e8614fb8f30..b3593cf4c3a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs @@ -72,11 +72,6 @@ public string IntermediateOutputPath { set { SetProperty (ActiveConfigurationProperties, KnownProperties.IntermediateOutputPath, value); } } - public BuildItem GetItem (string include) - { - return ItemGroupList.SelectMany (g => g).First (i => i.Include ().Equals (include, StringComparison.OrdinalIgnoreCase)); - } - public void AddReferences (params string [] references) { foreach (var s in references) @@ -89,12 +84,6 @@ public void AddSources (params string [] sources) Sources.Add (new BuildItem.Source (s)); } - public void Touch (params string [] itemPaths) - { - foreach (var item in itemPaths) - GetItem (item).Timestamp = DateTimeOffset.UtcNow; - } - public virtual ProjectRootElement Construct () { var root = ProjectRootElement.Create (); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs index b2ae958df8b..241fbad084e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs @@ -73,7 +73,7 @@ public bool Build (XamarinProject project, bool doNotCleanupOnUpdate = false, st project.NuGetRestore (Path.Combine (XABuildPaths.TestOutputDirectory, ProjectDirectory), PackagesDirectory); } - bool result = BuildInternal (Path.Combine (ProjectDirectory, project.ProjectFilePath), Target, parameters, environmentVariables, restore: project.PackageReferences?.Count > 0); + bool result = BuildInternal (Path.Combine (ProjectDirectory, project.ProjectFilePath), Target, parameters, environmentVariables, restore: project.ShouldRestorePackageReferences); built_before = true; if (CleanupAfterSuccessfulBuild) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs index 25fe1f29073..6485a65c7b5 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs @@ -67,7 +67,7 @@ public void Save () public bool BuildProject(XamarinProject project, string target = "Build") { - BuildSucceeded = BuildInternal(Path.Combine (SolutionPath, project.ProjectName, project.ProjectFilePath), target, restore: project.PackageReferences?.Count > 0); + BuildSucceeded = BuildInternal(Path.Combine (SolutionPath, project.ProjectName, project.ProjectFilePath), target, restore: project.ShouldRestorePackageReferences); return BuildSucceeded; } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs index 653545a483c..f85c4620d93 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs @@ -31,6 +31,7 @@ public abstract class XamarinProject public IList Packages { get; private set; } public IList References { get; private set; } public IList PackageReferences { get; private set; } + public virtual bool ShouldRestorePackageReferences => PackageReferences?.Count > 0; public IList Imports { get; private set; } PropertyGroup common, debug, release; @@ -120,6 +121,17 @@ public void SetProperty (IList group, string name, Func value, } } + public BuildItem GetItem (string include) + { + return ItemGroupList.SelectMany (g => g).First (i => i.Include ().Equals (include, StringComparison.OrdinalIgnoreCase)); + } + + public void Touch (params string [] itemPaths) + { + foreach (var item in itemPaths) + GetItem (item).Timestamp = DateTimeOffset.UtcNow; + } + string project_file_path; public string ProjectFilePath { get { return project_file_path ?? ProjectName + Language.DefaultProjectExtension; } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs index f0597b282ff..0ab24325683 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs @@ -224,7 +224,7 @@ void ReorderActivityAliases (XElement app) } } - public IList Merge (List subclasses, List selectedWhitelistAssemblies, string applicationClass, bool embed, string bundledWearApplicationName, IEnumerable mergedManifestDocuments) + public IList Merge (List subclasses, string applicationClass, bool embed, string bundledWearApplicationName, IEnumerable mergedManifestDocuments) { string applicationName = ApplicationName; @@ -244,7 +244,7 @@ public IList Merge (List subclasses, List select if (manifest.Attribute (androidNs + "versionName") == null) manifest.SetAttributeValue (androidNs + "versionName", "1.0"); - app = CreateApplicationElement (manifest, applicationClass, subclasses, selectedWhitelistAssemblies); + app = CreateApplicationElement (manifest, applicationClass, subclasses); if (app.Attribute (androidNs + "label") == null && applicationName != null) app.SetAttributeValue (androidNs + "label", applicationName); @@ -399,12 +399,12 @@ public IList Merge (List subclasses, List select } AddInstrumentations (manifest, subclasses, targetSdkVersionValue); - AddPermissions (app, selectedWhitelistAssemblies); - AddPermissionGroups (app, selectedWhitelistAssemblies); - AddPermissionTrees (app, selectedWhitelistAssemblies); - AddUsesPermissions (app, selectedWhitelistAssemblies); - AddUsesFeatures (app, selectedWhitelistAssemblies); - AddSupportsGLTextures (app, selectedWhitelistAssemblies); + AddPermissions (app); + AddPermissionGroups (app); + AddPermissionTrees (app); + AddUsesPermissions (app); + AddUsesFeatures (app); + AddSupportsGLTextures (app); ReorderActivityAliases (app); ReorderElements (app); @@ -508,7 +508,7 @@ Func GetGenerator (TypeDefinition type) return null; } - XElement CreateApplicationElement (XElement manifest, string applicationClass, List subclasses, List selectedWhitelistAssemblies) + XElement CreateApplicationElement (XElement manifest, string applicationClass, List subclasses) { var application = manifest.Descendants ("application").FirstOrDefault (); @@ -521,10 +521,10 @@ XElement CreateApplicationElement (XElement manifest, string applicationClass, L .Where (attr => attr != null) .ToList (); var usesLibraryAttr = - Assemblies.Concat (selectedWhitelistAssemblies).SelectMany (path => UsesLibraryAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))) + Assemblies.SelectMany (path => UsesLibraryAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))) .Where (attr => attr != null); var usesConfigurationAttr = - Assemblies.Concat (selectedWhitelistAssemblies).SelectMany (path => UsesConfigurationAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))) + Assemblies.SelectMany (path => UsesConfigurationAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))) .Where (attr => attr != null); if (assemblyAttr.Count > 1) throw new InvalidOperationException ("There can be only one [assembly:Application] attribute defined."); @@ -772,26 +772,20 @@ public void AddFastDeployPermissions () app.AddBeforeSelf (new XElement ("uses-permission", new XAttribute (attName, permReadExternalStorage))); } - void AddPermissions (XElement application, List selectedWhitelistAssemblies) + void AddPermissions (XElement application) { - // Look in user assemblies + whitelist (like Maps) - var check_assemblies = Assemblies.Union (selectedWhitelistAssemblies); - var assemblyAttrs = - check_assemblies.SelectMany (path => PermissionAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); + Assemblies.SelectMany (path => PermissionAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); // Add unique permissions to the manifest foreach (var pa in assemblyAttrs.Distinct (new PermissionAttribute.PermissionAttributeComparer ())) if (!application.Parent.Descendants ("permission").Any (x => (string)x.Attribute (attName) == pa.Name)) application.AddBeforeSelf (pa.ToElement (PackageName)); } - void AddPermissionGroups (XElement application, List selectedWhitelistAssemblies) + void AddPermissionGroups (XElement application) { - // Look in user assemblies + whitelist (like Maps) - var check_assemblies = Assemblies.Union (selectedWhitelistAssemblies); - var assemblyAttrs = - check_assemblies.SelectMany (path => PermissionGroupAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); + Assemblies.SelectMany (path => PermissionGroupAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); // Add unique permissionGroups to the manifest foreach (var pga in assemblyAttrs.Distinct (new PermissionGroupAttribute.PermissionGroupAttributeComparer ())) @@ -799,13 +793,10 @@ void AddPermissionGroups (XElement application, List selectedWhitelistAs application.AddBeforeSelf (pga.ToElement (PackageName)); } - void AddPermissionTrees (XElement application, List selectedWhitelistAssemblies) + void AddPermissionTrees (XElement application) { - // Look in user assemblies + whitelist (like Maps) - var check_assemblies = Assemblies.Union (selectedWhitelistAssemblies); - - var assemblyAttrs = - check_assemblies.SelectMany (path => PermissionTreeAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); + var assemblyAttrs = + Assemblies.SelectMany (path => PermissionTreeAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); // Add unique permissionGroups to the manifest foreach (var pta in assemblyAttrs.Distinct (new PermissionTreeAttribute.PermissionTreeAttributeComparer ())) @@ -813,13 +804,10 @@ void AddPermissionTrees (XElement application, List selectedWhitelistAss application.AddBeforeSelf (pta.ToElement (PackageName)); } - void AddUsesPermissions (XElement application, List selectedWhitelistAssemblies) + void AddUsesPermissions (XElement application) { - // Look in user assemblies + whitelist (like Maps) - var check_assemblies = Assemblies.Union (selectedWhitelistAssemblies); - - var assemblyAttrs = - check_assemblies.SelectMany (path => UsesPermissionAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); + var assemblyAttrs = + Assemblies.SelectMany (path => UsesPermissionAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); // Add unique permissions to the manifest foreach (var upa in assemblyAttrs.Distinct (new UsesPermissionAttribute.UsesPermissionComparer ())) @@ -841,13 +829,10 @@ void AddUsesLibraries (XElement application, IEnumerable l application.Add (ula.ToElement (PackageName)); } - void AddUsesFeatures (XElement application, List selectedWhitelistAssemblies) + void AddUsesFeatures (XElement application) { - // Look in user assemblies + whitelist (like Maps) - var check_assemblies = Assemblies.Union (selectedWhitelistAssemblies); - - var assemblyAttrs = - check_assemblies.SelectMany (path => UsesFeatureAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); + var assemblyAttrs = + Assemblies.SelectMany (path => UsesFeatureAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); // Add unique features by Name or glESVersion to the manifest foreach (var feature in assemblyAttrs) { @@ -865,13 +850,10 @@ void AddUsesFeatures (XElement application, List selectedWhitelistAssemb } } - void AddSupportsGLTextures (XElement application, List selectedWhitelistAssemblies) + void AddSupportsGLTextures (XElement application) { - // Look in user assemblies + whitelist (like Maps) - var check_assemblies = Assemblies.Union (selectedWhitelistAssemblies); - - var assemblyAttrs = - check_assemblies.SelectMany (path => SupportsGLTextureAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); + var assemblyAttrs = + Assemblies.SelectMany (path => SupportsGLTextureAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path))); // Add unique items by Name to the manifest foreach (var feature in assemblyAttrs) { diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs index c35bd4889ec..20b90515eed 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs @@ -495,7 +495,6 @@ internal static IEnumerable GetFrameworkAssembliesToTreatAsUserAssemblie } #endif - internal static readonly string [] FrameworkAttributeLookupTargets = {"Mono.Android.GoogleMaps.dll"}; internal static readonly string [] FrameworkEmbeddedJarLookupTargets = { "Mono.Android.Support.v13.dll", "Mono.Android.Support.v4.dll", @@ -507,7 +506,6 @@ internal static IEnumerable GetFrameworkAssembliesToTreatAsUserAssemblie }; // MUST BE SORTED CASE-INSENSITIVE internal static readonly string[] FrameworkAssembliesToTreatAsUserAssemblies = { - "Mono.Android.GoogleMaps.dll", "Mono.Android.Support.v13.dll", "Mono.Android.Support.v4.dll", "Xamarin.Android.NUnitLite.dll", diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 5df89aad721..6648831ac6f 100755 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -2221,7 +2221,7 @@ because xbuild doesn't support framework reference assemblies.