From 42fcd79af6cccab2152a5d53f03218f6c43c07ca Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 27 Aug 2018 12:04:34 -0500 Subject: [PATCH] [Mono.Android] build and reference non-PCL Java.Interop Fixes: http://work.devdiv.io/667174 Context: https://github.com/xamarin/java.interop/pull/360 Building `Java.Interop` in a similar fashion as `Mono.Android.dll`: true MonoAndroid v1.0 $(XAInstallPrefix)xbuild-framework $(XAInstallPrefix)xbuild-frameworks\MonoAndroid\v1.0\mscorlib.dll False $(XAInstallPrefix)xbuild-frameworks\MonoAndroid\v1.0\System.dll False $(XAInstallPrefix)xbuild-frameworks\MonoAndroid\v1.0\System.Core.dll False Decreases the assemblies referenced in a "Hello World" Xamarin.Android project dramatically: Adding assembly reference for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively... Adding assembly reference for System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.ComponentModel.Composition, Version=2.0.5.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, recursively... Adding assembly reference for System.Diagnostics.Debug, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Threading, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Collections, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Collections.Concurrent, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Reflection, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Linq.Expressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Reflection.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Dynamic.Runtime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.ObjectModel, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Linq, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Runtime.InteropServices, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Runtime.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for System.Reflection.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, recursively... Adding assembly reference for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively... Becomes: Adding assembly reference for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively... Adding assembly reference for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, recursively... And the savings in build times for "Hello World", this is the `Rebuild` target: - `Debug` + PCL - 8.424s - `Release` + PCL - 13.651s - `Debug` + *not* PCL - 4.258s - `Release` + *not* PCL - 9.487s *NOTE: this was a master/Debug build of Xamarin.Android* The `Java.Interop.dll` in `lib\xamarin.android\xbuild\Xamarin\Android\` remains unchanged, as referenced by `Xamarin.Android.Build.Tasks`. The modified `Java.Interop.dll` in `lib\xamarin.android\xbuild-frameworks\MonoAndroid\v1.0\` will look something like: // bin\Debug\lib\xamarin.android\xbuild-frameworks\MonoAndroid\v1.0\Java.Interop.dll // Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065 [assembly: TargetFramework("MonoAndroid,Version=v1.0")] Changes: - `$(MSBuildThisFile)` should be an input of `_BuildJavaInterop` - Set `$(JavaInteropProfile)` and various other properties so a non-PCL version of `Java.Interop.dll` is built - Make sure to copy `Java.Interop.dll` from the `DebugNet45` directory - Bump to java.interop/master/659711c https://github.com/xamarin/java.interop/compare/893562c...659711c --- external/Java.Interop | 2 +- src/Mono.Android/Mono.Android.targets | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/external/Java.Interop b/external/Java.Interop index 893562cb6b0..659711c7740 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 893562cb6b02031c5991ec94769db5fd1a88b53e +Subproject commit 659711c77407c95a27b58ff6f2c84c9fe6db0691 diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets index f8242c06ada..339a4917f57 100644 --- a/src/Mono.Android/Mono.Android.targets +++ b/src/Mono.Android/Mono.Android.targets @@ -8,13 +8,23 @@ + + <_GlobalProperties> + JavaInteropProfile=Net45; + XAInstallPrefix=$(XAInstallPrefix); + TargetFrameworkIdentifier=MonoAndroid; + TargetFrameworkVersion=v1.0; + TargetFrameworkRootPath=$(XAInstallPrefix)xbuild-frameworks; + + - +