Xamarin.Android 4.14

The Xamarin.Android 4.14 series updates OpenTK-1.0.dll to improve compatibility with Xamarin.iOS and reduces installation size.

Xamarin.Android 4.14.0

New Features

  • OpenTK-1.0 now has an API that is more compatible with Xamarin.iOS. Check these 2 samples as an example of shared code between Android and iOS apps, which uses OpenTK 1.0:
  • OpenTK-1.0 now has an improved OpenGL ES 3.0 API with more specific enums.
  • The profiler now works!
  • On OS X the installer size is 36% smaller (147MB vs. 229MB).
  • On Windows the Xamarin.Android installer is now bundled with the Xamarin.iOS installer.
  • The Mono.Android.GoogleMaps.dll assembly is now obsolete and will be removed in a future release. Please use the Google Play Services component.
  • The Mono.Android.Support.v4.dll assembly is now obsolete and will be removed in a future release. Please use the Android Support Library v4 component.
  • The Mono.Android.Support.v13.dll assembly is now obsolete and will be removed in a future release. Please use the Android Support Library v13 component.
  • Xamarin.Android version information is now embedded into Mono.Android.dll within a AssemblyInformationalVersionAttribute custom attribute. To lookup this information for diagnostic purposes:
    var attrs = (System.Reflection.AssemblyInformationalVersionAttribute[])
        typeof (Java.Lang.Object)
        .Assembly
        .GetCustomAttributes(typeof(System.Reflection.AssemblyInformationalVersionAttribute), inherit: true);
    string version = attrs [0].InformationalVersion;
    // version is like "4.13.350.144144054; git-rev-head:89776b6; git-branch:master"
  • Two new experimental GC Bridge modes added. The GC Bridge is responsible for making sure memory management works fine across Xamarin.Android and Dalvik. The new modes, named new and tarjan, fix some algorithmic non linearities that can result in performance improvements of over 10x. Two new modes proved necessary as they have unique performance characteristics that better fit different applications. The better scalability can be seen in the following benchmark, showing how the new modes perform compared to the old one.

    To ensure maximum reliability to current applications, the new modes must be explicitly enabled by passing bridge-implementation=new or bridge-implementation=tarjan to the MONO_GC_PARAM environment. For more information see the guides on Environment and Garbage Collection.

Bug fixes

  • 4902: Determine TimeZone from java.util.TimeZone, not persist.sys.timezone.
  • 7384: Improve compatibility of OpenTK-1.0 between Xamarin.Android and Xamarin.iOS.
  • 8182: OpenTK app + Intent.CreateChooser() crashes.
  • 10894: OpenTK.FrameEventArgs.set_Time crash
  • 11846: Some warnings can't find its source file.
  • 12048: Missing static methods from type android.graphics.Color.
  • 13963: AIDL bound services error when service and client are run under separate PIDs.
  • 15022: Android sample 'Gesture Builder' gives build error with Linker Option "Link ALL" on Release mode.
  • 16589: Not all dependent assemblies are searched for .jars.
  • 16621: TestRunner Does Not Execute TestFixtureSetUp/TearDown When Running Individual Tests.
  • 16805: Class reference in <fragment class=""> not properly resolved in Library project.
  • 17128: Seek on Filestream passed 2GB raises exception.
  • 17155: TimeZoneInfo.ConvertTime adjustment rules aren't considered between Jan 1st and DateEnd.
  • 17658: AndroidResgen does not encode (certain?) reserved f# keywords.
  • 17710: Debug installation failure in FastDev assembly directory creation.
  • 17788: Generated code references members which don't exist.
  • 17884: Changing the managedName of a class that matches a namespace part does not stop the "naming violation" warning.
  • 17994: Android AudioTrack constructor and static GetMinBufferSize have inconsistent channel configuration parameters.
  • 18016: Weird behaviour on Renderscript bc files under Resources/raw folder.
  • 18255: Generated gdb.env file on windows does not work correctly.
  • 18259: WCF service call throws NullReferenceException in release configuration.
  • 18369: Java.Lang.StringBuilder.Append(string s) throws NoSuchMethod exception.
  • 18526: I18n dlls do not exist in debug apks.
  • 18580: Linker strips __TypeRegistrations and JNI type mappings fail.
  • 18609: Android FileObserver invalid mask.
  • 18640: View.CanScroll(Horizontally|Vertically) incorrect parameter type.
  • 18763: Native SIGSEGVs don't invoke Android's SIGSEGV handler.
  • 18962: On Android, SslStream authentication does not know about the system's default trusted roots, causing "Invalid certificate received from server"
  • 19282: Slow build times.
  • 19748: Android build tools should use aapt --max-res-version, with the API level that the app is compiled against
  • 20179: PCLv2 facade assemblies aren't installed when required.
  • 20606: Types with [Export]ed methods cannot be constructed.
  • 20672: ListChangedEventArgs.PropertyDescriptor is always null in BindingList.ListChanged event args
  • 20911: Support zipalign location change in build-tools r20.

Integrated Mono features/fixes

Based on Mono 3.6.0 commit 5ff701f7.

  • 9541: XPathNavigator.SchemaInfo is null after navigating XmlDocument.
  • 13640: Debugger steps to line which is not executed
  • 14987: localized resource loading is overoptimized.
  • 15695: sgen hangs when creating threads with pthread_create
  • 16439: Exception thrown in async call is bypassing catch block.
  • 16974: SslStream.AuthenticateAsServer only send the EndCertificate, but not its chain...
  • 17615: Unexpected parsing with Lithuanian culture.
  • 17878: Bug in awaiters (unnecessary Post).
  • 18113: XslCompiledTransform does not handle whitespace in value-of elements correctly.
  • 18114: XslCompiledTransform throws XsltException when executing the msxsl:node-set function on a node set.
  • 18118: XslCompiledTransform uses incorrect context when a global variable references another global variable
  • 18182: ConcurrentQueue<T>.TryPeek() is not thread safe.
  • 18213: System.Runtime.Caching.MemoryCache doesn't honor SlidingExpiration.
  • 18235: System.Runtime.Caching.MemoryCache doesn't order expirable items correctly.
  • 18245: System.Runtime.MemoryCache.GetValues() throws LockRecursionException with expired items
  • 18248: CompileQuoteUnaryExpression is not implemented.
  • 18361: FileInfo.MoveTo() does not work with absolute paths
  • 18378: WebStack: Missing method implementations
  • 18400: Searching an array with indexOf is sometimes far slower than with a for loop
  • 18494: System.Net.Http.Headers.RangeHeaderValue.Parse() throws FormatException.
  • 18564: Race condition in XNamespace.GetName().
  • 18574: Fix parsing of IPv6 addresses.
  • 18599: StringBuilder.AppendFormat() stopped working in multithreading.
  • 18673: Quadratic Time for Enumerable.GroupBy()
  • 18687: HashSet.TrimExcess() doubles the size of the collection each time it is called
  • 18770: System.Globalization.SortVersion missing
  • 18848: System.Net.Http.HttpClientHandler doesn't close TCP connections after Dispose() call
  • 18898: Cannot access DataRowView data from a DataView with a state filter.
  • 18914: Unhandled exception is raised on attempt to watch local var after async/await call.
  • 19082: Assembly.GetAssembly(x).DefinedTypes.Select(v => v.AsType()) vs typeof(X).
  • 19083: Bug in mini_emit_memset
  • 19235: Assertion at hazard-pointer.c:233, condition `small_id < HAZARD_TABLE_OVERFLOW' not met
  • 19343: SIGSEGV crash in garbage collector.
  • 19460: View Accessor for Zero byte file MemoryMappedFile.
  • 19564: Lazy<T>.Value throws InvalidOperationException instead of original exception when called by second thread
  • 19644: System.Net.Http doesn't encode Content-MD5 correctly
  • 19667: System.Net.Http.HttpClient.GetStringAsync() return strings with unicode BOM
  • 19738: Process.PrivateMemorySize64 always returns 0.
  • 19823: InvalidOperationException in ServicePoint.RemoveConnectionGroup.
  • 19825: Mono Reflection cannot handle Custom Attributes constructors that take Jagged Arrays.
  • 19864: Overloaded Process.WaitForExit() method returns false immediately
  • 19881: ProductInfoHeaderValue fails to parse User-Agent string without version
  • 19915: new Guid("{ 0x00000001, 0x0002, ...") throws FormatException due to whitespace
  • 19924: Step over AppDomain.Unload results into continued execution.
  • 20052: Memory mappped files bug.
  • 20591: MemoryMappedFile CreateNew aborts on using statement.
  • 519648: DataRowCollection.Find throws System.IndexOutOfRangeException when passed new object [] {null}.

API Changes

Xamarin Workbook

If it's not already installed, install the Xamarin Workbooks app first. The workbook file should download automatically, but if it doesn't, just click to start the workbook download manually.