Skip to content

Releases: dotnet/android

Xamarin.Android 10.3.0.33

26 Mar 23:45
Compare
Choose a tag to compare
Pre-release

March 26, 2020 — Xamarin.Android 10.3.0.33 was published as part of Visual Studio 2019 version 16.6 Preview 2 and to the Preview updater channel of Visual Studio 2019 for Mac version 8.6 Preview 1

Corresponding Visual Studio 2019 Preview release notes

What's new

Preview bindings for Android 11 Developer Preview

This version includes preview bindings for the first Developer Preview of Android 11 from Google. See the Android 11 Developer Preview documentation for additional information about the behavior and API changes in this new Android version. To try the bindings for the new APIs in a Xamarin.Android project, set Compile using Android version: (Target Framework) to Android 10.0.99 (R) under the Application tab of the Visual Studio project property pages. This sets the TargetFrameworkVersion property to v10.0.99 in the .csproj file:

<TargetFrameworkVersion>v10.0.99</TargetFrameworkVersion>

New features

These bindings take advantage of C# 8.0's support for default and static interface members to provide C# interface APIs that more closely match the original Android APIs.

For example, in the Android.Views.TextClassifiers namespace, TextClassifier.HintTextIsEditable is now available as ITextClassifier.HintTextIsEditable, and the old TextClassifier.HintTextIsEditable field is now marked [Obsolete].

Note: An older set of bindings for interface constants were also available in Consts classes like TextClassifierConsts in earlier target framework versions. Those classes were marked [Obsolete] for several years. They have been removed completely for the Android 10.0.99 (R) target framework version. Project authors are encouraged to switch to the new interface members like ITextClassifier.HintTextIsEditable at their earliest convenience.

Build and deployment performance

  • GitHub PR 4308: Skip executing keytool -list during the SignAndroidPackage target. This saved about 200 milliseconds for the SignAndroidPackage target for incremental builds where a new APK was generated, such as after changing an Android resource.
  • GitHub PR 4316: Switch the LinkAssembliesNoShrink task to take advantage of the caching from the new Mono.Cecil wrapper methods introduced in Java.Interop GitHub PR 570. This reduced the time for the task from about 710 milliseconds to about 700 milliseconds for an initial clean build of a small Xamarin.Forms test app.
  • GitHub PR 4320: Update the version of LibZipSharp used by the build tasks to 1.0.10, which switches several byte[] instances to System.Buffers.ArrayPool instances to save on allocations. This reduced the combined time for the ResolveLibraryProjectImports and BuildApk tasks from about 5.3 seconds to about 5.0 seconds for a small test Xamarin.Forms app on an initial clean build.
  • GitHub PR 4395: Remove use of temporary files during the ConvertResourcesCases task. This reduced the time for the task from about 610 milliseconds to about 510 milliseconds for a moderately large real-world project on initial clean builds as well as on incremental builds with Android resource changes.
  • Java.Interop GitHub PR 596: Use File.Exists() instead of DirectoryGetFile() in a few places. This reduced the time for the LinkAssembliesNoShrink task from about 710 milliseconds to about 430 milliseconds for a small test Xamarin.Forms app on an initial clean build.

App startup performance

  • GitHub PR 4302: Avoid unneeded calls to GetCustomAttribute() during app startup for the common case where an app has no types decorated with the [JniAddNativeMethodRegistration] attribute. Additionally, instead of using a managed method to propagate uncaught exceptions from Java, use a Java method that calls into the unmanaged Xamarin.Android runtime. These changes reduced the time to display the first screen of a small test Xamarin.Forms app from about 730 milliseconds to about 700 milliseconds for a Release configuration build on a Google Pixel 3 XL device.
  • Java.Interop GitHub PR 582: Remove a static array initialization from JniRuntime and an array iteration during JniRuntime.JniTypeManager.GetTypeSignature(), and leverage Type.GetTypeCode() for faster lookups of builtin types.

Mono Framework version update to 6.12

Xamarin.Android now uses the Mono 6.12 runtime and class libraries at Commit d90665a4, bringing in about 350 new commits.

Removal of AndroidExplicitCrunch feature

In previous Xamarin.Android versions, setting the AndroidExplicitCrunch MSBuild property to true would configure the build to crunch PNG drawable resources using a separate MSBuild task before passing them to AAPT.

This feature was never compatible with projects configured to use AAPT2 and was automatically disabled in those projects. For projects configured to use the older AAPT tool, this feature could cause builds to rerun AAPT on every build. Due to these limitations, this feature has now been removed from Xamarin.Android. The AndroidExplicitCrunch MSBuild property is now ignored. Project authors who added this property to their .csproj files in the past can now remove it.

Removal of keystore certificate fingerprint from build output

The performance improvement that skips executing keytool -list during the build means that the SHA-1 certificate fingerprint no longer appears in the build output. To determine certificate fingerprints in this version, follow the steps from the Finding your Keystore's Signature guide instead.

Compatibility with embedded debug information

The Mono Framework version in this Xamarin.Android version adds compatibility for reading embedded debugging information from assemblies built with Build > Advanced > Debugging information set to Embedded in the Visual Studio project property pages. This corresponds to the embedded value for the DebugType MSBuild property in the .csproj file:

<PropertyGroup>
  <DebugType>embedded</DebugType>
</PropertyGroup>

See the symbol embedding design documentation for more information.

Localized warnings and errors for builds

Many of the warnings and errors in the Xamarin.Android build tasks now provide localized messages that match the region and language settings of the build environment.

Issues fixed

Application and library build and deployment

  • Developer Community 861086: Starting in Xamarin.Android 10.1, errors similar to 'fixedsize' is incompatible with attribute ChildLayout (attr) enum prevented building projects successfully if they contained custom attribute names ending with the word Layout.
  • GitHub PR 4340: ...
Read more

Xamarin.Android 10.2.100.7

17 Mar 01:21
Compare
Choose a tag to compare
Pre-release

March 16, 2020 — Xamarin.Android 10.2.100.7 was published as part of Visual Studio 2019 version 16.6 Preview 1

Corresponding Visual Studio 2019 Preview release notes

What's new

Build and deployment performance

  • GitHub PR 3885: Adjust caching of device information during the build so it includes the case where no device or emulator is found. This reduced the time for the DetectIfAppWasUninstalled task from about 2 seconds to about 0 seconds, bringing the total time down closer to the time for a build where a device or emulator is available.
  • GitHub PR 3999: Allow BuildApk to merge new files into the previous APK instead of generating a new APK from scratch for incremental builds where an Android resource file has changed. This reduced the incremental build time for BuildApk step from about 4 seconds to about 0.7 seconds for a small test app when one Android resource file was changed between builds.
  • GitHub PR 4158: Update the default order of strategies used to detect installed packages to minimize time for modern devices. This can potentially save about 100 milliseconds for the first deployment of an app after launching Visual Studio.
  • GitHub PR 4215: Remove a redundant call to the ResolveAssemblyReference task during the _ResolveSatellitePaths target. This reduced the total time spent in calls to ResolveAssemblyReference from about 240 milliseconds to about 150 milliseconds for incremental builds of a medium sized project. The same savings also apply to the deployment step, resulting in an approximate combined savings of 180 milliseconds for build and deployment of the test project.
  • GitHub PR 4236: Use a Lazy<T> type to access the NuGet lock file so it is only loaded when needed, and remove some redundant logging messages. This reduced the total time for the ResolveAssemblies task from about 320 milliseconds to about 240 milliseconds for incremental builds of a medium sized project. The same savings also apply to the deployment step, resulting in an approximate combined savings of 160 milliseconds for build and deployment of the test project.
  • GitHub PR 4251: Reuse MemoryStream instances throughout the Xamarin.Android build targets to save on allocations. This reduced the combined time for the _GenerateJavaStubs, _ResolveLibraryProjectImports, and _GeneratePackageManagerJava targets from about 3.3 seconds to about 3.0 seconds for an incremental build of a test app where the MainActivity type was modified between builds.
  • GitHub PR 4260:
    Remove unneeded calls to string.Format() during the LinkAssembliesNoShrink task. This reduced the time for the task from about 800 milliseconds to about 770 milliseconds for an initial clean build of a small Xamarin.Forms test app.
  • GitHub PR 4268, Java.Interop GitHub PR 570: Implement and switch to a new set of wrapper methods around the Mono.Cecil methods to allow caching the results during the GenerateJavaStubs task. This reduced the time for the task from about 1.4 seconds to about 0.9 seconds for an initial clean build of small test Xamarin.Forms test app.
  • GitHub PR 4303: Replace string interpolation during typemap assembly code generation in GenerateJavaStubs with sequential calls to StreamWriter.Write(). This reduced the total time for GenerateJavaStubs from about 1.3 seconds to about 0.9 seconds for an initial clean build of a small Xamarin.Forms test app without fast deployment.
  • Java.Interop GitHub PR 559: Switch from using Assembly.GetName().Name to using Assembly.FullName combined with string.Substring() in JavaNativeTypeManager.GetPackageName(). This reduced the time for GenerateJavaStubs from about 390 milliseconds to about 360 milliseconds for an initial clean build of a small Xamarin.Forms test app.
  • Java.Interop GitHub PR 577: Change a LINQ expression to a loop in Java.Interop's IsSubclassOf() extension method. This reduced the time for GenerateJavaStubs from about 560 milliseconds to about 540 milliseconds for an initial clean build of a small Xamarin.Forms test app.

App startup performance

  • GitHub PR 3958: Skip scanning for .exe files during app startup because Xamarin.Android app only expect .dll assemblies. This reduced the Runtime.init() phase of application startup for a small test app from about 165 milliseconds to about 164 milliseconds on a Google Pixel 3 XL device and from about 530 milliseconds to about 450 milliseconds on an x86 emulator using HAXM.
  • GitHub PR 3992: Optimize the storage format of the per-application Java-to-managed and managed-to-Java type mappings to allow more efficient lookups. This reduced the time to display the first screen of a small test Xamarin.Forms app from about 800 milliseconds to about 790 milliseconds for a Release configuration build on a Google Pixel 3 XL device.
  • Java.Interop GitHub PR 541 Add [MethodImpl (MethodImplOptions.AggressiveInlining)] to Java.Interop methods and properties that are called many times during Xamarin.Forms app startup. This reduced the time to display the first screen of a blank Xamarin.Forms app from about 560 milliseconds to about 540 milliseconds for a Release configuration build on a Google Pixel 3 XL device.
  • Java.Interop GitHub PR 555: Implement and switch to a new JniTypeManager.GetTypeSignature() method that returns a JniTypeSignature instance instead of an IEnumerable<JniTypeSignature>. This reduced the time to display the first screen of a small test Xamarin.Forms app from about 760 milliseconds to about 750 milliseconds for a Release configuration build on a Google Pixel 3 XL device. It also reduced the number of object allocations from about 9300 to about 8900.
  • Java.Interop GitHub PR 557: Remove unneeded calls to IntrospectionExtensions.GetTypeInfo() now that Java.Interop is a .NET Standard library rather than a PCL. This reduced the time to display the first screen of a small test Xamarin.Forms app from about 755 milliseconds to about 753 milliseconds for a Release configuration build on a Google Pixel 3 XL device.
  • Java.Interop GitHub PR 574: Skip calling GetCustomAttribute() in cases where JniTypeManager.GetSimpleReference() can be used instead.

Android resource editing performance

  • GitHub PR 3674: Correct the Inputs for the _ManagedUpdateAndroidResgen target so that the target is skipped as expected during incremental design-time builds.

Mono Framework version update to 6.10

Xamarin.Android now uses the Mono 6.10 runtime and class libraries at Commit fc145be9, bringing in about 500 new commits.

Bindings projects now exclude private nested types

Previously, Xamarin.Android bindings projects generated public bindings for all...

Read more

Xamarin.Android 10.2.0.100

17 Mar 03:10
988c811
Compare
Choose a tag to compare

March 23, 2020 — Xamarin.Android 10.2.0.100 was released to the Stable updater channel of Visual Studio 2019 for Mac version 8.5.

March 16, 2020 — Xamarin.Android 10.2.0.100 was released as part of Visual Studio 2019 version 16.5.

Corresponding Visual Studio 2019 release notes

What's new compared to Xamarin.Android 10.1

Important: The names for generated Java types are different in this release. Any project that explicitly uses one of the old names that starts with md5 will need to be updated by hand to account for this change. See Breaking change for generated Java type names below for more details.

Important: The default multidex tool is now R8 instead of DX. R8 performs additional Java dependency checks that can result in new build warnings and errors like:

R8 : error : Compilation can't be completed because some library classes are missing.

See D8 enabled by default for all projects below for more details

Breaking change for generated Java type names

The fallback option in Xamarin.Android 10.1 that allowed using the old style of generated Java type names that started with md5 has now been removed.

Authors of projects that include literal uses of generated Java type names that start with md5 will now need to transition to alternatives like the [Register] attribute and the [Activity] attribute.

Projects that have the LowercaseMD5 fallback option set in the $(AndroidPackageNamingPolicy) MSBuild property will now fail to build with the following error:

error XAGJS7015: System.NotSupportedException: PackageNamingPolicy.LowercaseHash is no longer supported.

To resolve the error, remove the section for the $(AndroidPackageNamingPolicy) property from the .csproj file:

<PropertyGroup>
  <AndroidPackageNamingPolicy>LowercaseMD5</AndroidPackageNamingPolicy>
</PropertyGroup>

See the Xamarin.Android 10.1 release notes for additional background information about this change and examples of how to update existing projects.

D8 enabled by default for all projects

Xamarin.Android has included an option to use the D8 DEX compiler since Xamarin.Android 9.2, but is has so far been disabled by default to provide a gradual path for finding and addressing compatibility issues. Starting in Xamarin.Android 10.2, the D8 DEX compiler option is now enabled by default for both existing and new projects.

To switch back from D8 to the earlier DX compiler for a particular project, set the Dex compiler option in the Visual Studio project property pages first to d8 and then to dx and save the changes, or set the $(AndroidDexTool) MSBuild property to dx by hand in the .csproj file:

<PropertyGroup>
  <AndroidDexTool>dx</AndroidDexTool>
</PropertyGroup>

Important: Because the default DEX compiler is now D8, the default multidex tool is now R8 instead of DX. R8 performs additional Java dependency checks that can result in new build warnings and errors like:

R8 : error : Compilation can't be completed because some library classes are missing.

If needed, these errors can be suppressed temporarily by configuring R8 to be less strict:

  1. Add a new text file to the project, named for example proguard-rules.pro.

  2. Set the contents of the file to:

    -ignorewarnings
    
  3. Edit the .csproj file in a text editor and add --pg-conf proguard-rules.pro to the $(AndroidR8ExtraArguments) MSBuild property, for example by adding the following lines:

    <PropertyGroup>
      <AndroidR8ExtraArguments>--pg-conf proguard-rules.pro</AndroidR8ExtraArguments>
    </PropertyGroup>

AndroidEnableDesugar now requires D8

Xamarin.Android now always use the D8 DEX compiler for projects that have the $(AndroidEnableDesugar) MSBuild property set to true:

<PropertyGroup>
  <AndroidEnableDesugar>true</AndroidEnableDesugar>
</PropertyGroup>

Similarly, Xamarin.Android now always uses the R8 code shrinker for projects that have $(AndroidEnableDesugar) set to true and that have the Code shrinker ($(AndroidLinkTool)) set to ProGuard or r8.

Note: $(AndroidEnableDesugar) does not correspond to any setting in the project properties pages in Visual Studio, so this change only affects project authors who have added the property to .csproj files by hand.

Background information

This change allows Xamarin.Android to remove support for the old desugar_deploy.jar mechanism from the Android Jack toolchain that was deprecated in 2017.

Mono Framework version update to 6.8

Xamarin.Android now uses the Mono 6.8 runtime and class libraries at Commit c0c5c78e, bringing in about 800 new commits.

Build and deployment performance

  • GitHub PR 3692: For the specific scenario of Debug builds that have Use Fast Deployment enabled, undo part of the change from [GitHub PR 2718][github-pr-2718] so that type mappings are parsed at run time instead of being compiled into unmanaged native shared libraries. This reduced the time for the GenerateJavaStubs task from about 540 milliseconds to about 320 milliseconds for an incremental build of a test app where the MainActivity type was modified between builds. As expected, this did increase the app startup time from about 1.30 seconds to about 1.35 seconds, but that still left an overall savings of approximately 170 milliseconds.
  • GitHub PR 3856: Add a fallback naming scheme for the files that mark whether the outputs of the _CompileAndroidLibraryResources target are up-to-date with the input files. This allows projects that use a google-services.json item and that are configured to use AAPT2 to skip the _CompileAndroidLibraryResources target correctly during incremental builds.
  • GitHub PR 3907: Adjust GenerateResourceDesigner to use System.Reflection.Metadata rather than Cecil, use loops instead of LINQ expressions, and skip over .NET Standard libraries. This reduced the time for the GenerateResourceDesigner task during an incremental build from about 470 milliseconds to about 370 milliseconds for a small app on a test system.
  • GitHub PR 4020: Skip a managed linker step for assemblies that have no references to Java.Lang.Object, such as .NET Standard libraries. This reduced the time for the _LinkAssembliesNoShrink target on a test system from about 160 milliseconds to about 50 milliseconds for an incremental build after a one-line change to the MainActivity class.
  • Mono GitHub PR 17898: Skip over unnecessary DNS lookups for the IP address of the target Android device or emulato...
Read more

Xamarin.Android 10.2.0.100 Preview

03 Mar 02:21
988c811
Compare
Choose a tag to compare
Pre-release

March 10, 2020 — Xamarin.Android 10.2.0.100 was published to the Preview updater channel of Visual Studio 2019 for Mac version 8.5 Preview 6.

March 2, 2020 — Xamarin.Android 10.2.0.100 was published as part of Visual Studio 2019 version 16.5 Preview 5.

Corresponding Visual Studio 2019 Preview release notes

What's new

Issues fixed

Application Mono Framework behavior on device and emulator

This version of Xamarin.Android updates the Mono 6.8 runtime and class libraries from Commit 1cca0cfe to Commit c0c5c78e, adding 14 new commits.

Fixes included for issues reported with Xamarin.Android applications:

  • Developer Community 756697: Starting in Xamarin.Android 10.0, NTLM authentication in Xamarin.Android apps no longer worked, resulting in server-side System.ComponentModel.Win32Exception exceptions.

    The initial fix for this issue in Xamarin.Android 10.1 was incomplete. Xamarin.Android 10.2 now includes additional changes that allow switching back to the Xamarin.Android 9.4 HttpClient behavior.

    To switch back to the Xamarin.Android 9.4 behavior, set the $(AndroidHttpClientHandlerType) MSBuild property to System.Net.Http.MonoWebRequestHandler, System.Net.Http in your .csproj file:

    <PropertyGroup>
      <AndroidHttpClientHandlerType>System.Net.Http.MonoWebRequestHandler, System.Net.Http</AndroidHttpClientHandlerType>
    </PropertyGroup>

Installing

To get the new version in Visual Studio, update Visual Studio:

For other scenarios, the latest commercial .vsix and .pkg installer packages can be found in the project README.

Open source

Xamarin.Android 10.1.4.0

11 Feb 20:28
e44d1ae
Compare
Choose a tag to compare

February 11, 2020 — Xamarin.Android 10.1.4.0 was released as part of Visual Studio 2019 version 16.4.5

Corresponding Visual Studio 2019 release notes

Issues fixed

Application and library build and deployment

  • Developer Community 790804, Developer Community 854497: Starting in Xamarin.Android 10.1, Mono.AndroidTools.RequiresUninstallException: The installed package is incompatible. Please manually uninstall and try again. interrupted deployment if the keystore used to sign the app had changed compared to the previous deployment. Xamarin.Android 10.1.4.0 now automatically takes care of uninstalling the app in this case, like Xamarin.Android 10.0 did.

Installing

To get the new version in Visual Studio, update Visual Studio:

For other scenarios, the commercial .vsix installer package can be found in the project README.

Open source

Xamarin.Android 10.2.0.99

19 Feb 21:44
Compare
Choose a tag to compare
Pre-release

February 19, 2020 — Xamarin.Android 10.2.0.99 was published as part of Visual Studio 2019 version 16.5 Preview 3.

Corresponding Visual Studio 2019 Preview release notes

What's new

Issues fixed

Application and library build and deployment

  • Developer Community 790804, Developer Community 854497: Starting in Xamarin.Android 10.1, Mono.AndroidTools.RequiresUninstallException: The installed package is incompatible. Please manually uninstall and try again. interrupted deployment if the keystore used to sign the app had changed compared to the previous deployment. The fix for this issue is also included in Xamarin.Android 10.1.4.0.
  • Developer Community 854863: More than one device connected, please provide --device-id could prevent deploying successfully in projects configured to use the Android App Bundle publishing format when more than one device or emulator was attached.
  • Developer Community 869165: error CS0234: The type or namespace name 'CodeDom' does not exist in the namespace prevented building successfully in projects that used the word System as a dotted part of the default namespace for the project.
  • GitHub 4068: error MSB4044: The "CopyGeneratedJavaResourceClasses" task was not given a value for the required parameter "SourceTopDirectory". prevented incremental builds from completing successfully for projects using the Xamarin.AndroidX.Migration NuGet package.
  • GitHub PR 4106: Any unhandled exceptions in the Xamarin.Android MSBuild tasks would result in two MSBuild errors instead of one.
  • GitHub PR 4121: warning XA2000: Warning: Use of AppDomain::CreateDomain detected in assembly ... The AppDomain's will not be part of .NET 5 and therefore will be missing in newer Xamarin.Android releases. did not indicate that .NET 5 will still include the AppDomain type but only support use of a single AppDomain.
  • GitHub PR 4131: error ADB1000 was shown in addition to error ADB0030 if the ADB0030 error condition occurred.
  • GitHub PR 4205: Some of the Xamarin.Android MSBuild tasks were using foreground logging methods from background threads. That usage pattern could in theory lead to lock ups in the Visual Studio user interface.
  • Java.Interop GitHub 556: An app that referenced a library using the new support for Kotlin libraries could build successfully using an older version of Xamarin.Android but then fail when running on device. Xamarin.Android 10.2.0.99 adjusts one of the new APIs in Java.Interop.dll so that older versions of Xamarin.Android produce a linker error at build time.

Application Mono Framework behavior on device and emulator

This version of Xamarin.Android updates the Mono 6.8 runtime and class libraries from Commit df42020f to Commit 1cca0cfe, adding 17 new commits.

Fixes included for issues reported with Xamarin.Android applications:

  • Developer Community 716868, Mono GitHub 18106: Starting in Xamarin.Android 9.2, No compatible code running appeared in the Visual Studio debugger after the debugger paused on breakpoints in callback methods from Android Java APIs, such as WebViewClient.ShouldInterceptRequest() or Android.OS.AsyncTask.RunInBackground().

Design-time build process

  • GitHub PR 4199: Using ReSharper's class creation dialog in a Xamarin.Android project could lock up the Visual Studio interface.

Installing

To get the new version in Visual Studio, update Visual Studio:

For other scenarios, the latest commercial .vsix installer package can be found in the project README.

Open source

Xamarin.Android 10.2.0.84

11 Feb 20:13
Compare
Choose a tag to compare
Pre-release

January 22, 2020 — Xamarin.Android 10.2.0.84 was released as part of Visual Studio 2019 version 16.5 Preview 2.

January 14, 2020 — Xamarin.Android 10.2.0.84 was released as part of Visual Studio 2019 for Mac version 8.5 Preview 1 in the Preview updater channel.

Corresponding Visual Studio 2019 Preview release notes

What's new

Mono Framework version update to 6.8

Xamarin.Android now uses the Mono 6.8 runtime and class libraries at Commit df42020f, bringing in about 800 new commits.

Build and deployment performance

  • GitHub PR 3907: Adjust GenerateResourceDesigner to use System.Reflection.Metadata rather than Cecil, use loops instead of LINQ expressions, and skip over .NET Standard libraries. This reduced the time for the GenerateResourceDesigner task during an incremental build from about 470 milliseconds to about 370 milliseconds for a small app on a test system. The GenerateResourceDesigner task also runs in the foreground each time an Android resource is saved, so this makes Visual Studio more responsive when working on Android resources.
  • GitHub PR 3913: Skip the _GenerateJavaStubs target for builds where only Android resources have changed. This makes Visual Studio more responsive when working with Android resources. For example, it reduced the design-time build by about 400 milliseconds for a scenario where an Android resource was edited and saved in a moderately large app on a test system.
  • GitHub PR 4020: Skip a managed linker step for assemblies that have no references to Java.Lang.Object, such as .NET Standard libraries. This reduced the time for the _LinkAssembliesNoShrink target on a test system from about 160 milliseconds to about 50 milliseconds for an incremental build after a one-line change to the MainActivity class.

App startup performance

  • GitHub PR 3951: Avoid searching for unmanaged compiled assemblies generated by Enable Startup Tracing or AOT Compilation unless the app was built with one of those options enabled. This reduced the Runtime.init() phase of application startup for a small test app from about 172 milliseconds to about 168 milliseconds.

Improved Android manifest merging

Xamarin.Android now includes an option to use the same Android manifest merger tool that Android Studio uses to merge AndroidManifest.xml files. This provides new capabilities and improves compatibility with Android Studio. See the documentation for details about the available merge rules.

To enable the new behavior for your project, set the $(AndroidManifestMerger) MSBuild property to manifestmerger.jar in your .csproj file:

<PropertyGroup>
  <AndroidManifestMerger>manifestmerger.jar</AndroidManifestMerger>
</PropertyGroup>

Any project authors who were previously using the Xamarin.Android.ManifestMerger NuGet package can remove that package after adding this setting.

Bindings projects support for Kotlin libraries

This release adds better support for creating bindings for Kotlin libraries, including:

  • Hiding Kotlin internal types and members
  • Using Kotlin provided metadata to properly name method parameters
  • Hiding Kotlin generated methods like foo-impl that aren't intended for public use
  • Restoring Kotlin-mangled method names to their original names, such as changing foo-V5j3Lk8 back to foo
  • Adding support for Kotlin's native unsigned types (UInt, ULong, UShort, UByte)

Although it was technically possible to bind a Kotlin library previously, these changes greatly reduce the number of custom rules needed in the Transforms\Metadata.xml file to produce expected bindings.

No additional steps are needed to enable this. The binding process will detect if a .jar file was produced from Kotlin and will apply the needed fixes.

Important: Some of these changes required adding new APIs to Java.Interop.dll. This means that like the binding projects themselves, Xamarin.Android application projects that consume one of these new Kotlin library bindings must also be built using Xamarin.Android 10.2 or higher.

New build errors and warnings XA0121, XA2000

XA0121 error for old Xamarin.Android.Support library versions

The XA0121 warning from Xamarin.Android 10.1 is now an error because compatibility with the old GetAdditionalResourcesFromAssemblies MSBuild task has been removed.

Any project that uses one of the affected Xamarin.Android.Support libraries from version 26 or earlier will now see errors like:

error XA0121: Assembly 'Xamarin.Android.Support.Animated.Vector.Drawable' is using '[assembly: Java.Interop.JavaLibraryReferenceAttribute]', which is no longer supported. Use a newer version of this NuGet package or notify the library author.

To resolve these errors, update the project to use version 27 or higher of the Xamarin.Android.Support libraries.

XA2000 warning for use of AppDomain.CreateDomain()

The new XA2000 build warning identifies cases where projects are using the AppDomain.CreateDomain() API:

warning XA2000: Warning: Use of AppDomain::CreateDomain detected in assembly: AndroidApp1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. The AppDomain's will not be part of .NET 5 and therefore will be missing in newer Xamarin.Android releases.

Because AppDomain in .NET 5 will follow the .NET Core semantics, where there is only exactly one AppDomain and AppDomain.CreateDomain() throws PlatformNotSupportedException, any projects currently using AppDomain.CreateDomain() will need to switch to a different API like AssemblyLoadContext. Project authors are encouraged to begin this transition as soon as they can to prepare for the behavior change.

AndroidEnableDesugar now requires D8

Xamarin.Android now always use the D8 DEX compiler for projects that have the $(AndroidEnableDesugar) MSBuild property set to true:

<PropertyGroup>
  <AndroidEnableDesugar>true</AndroidEnableDesugar>
</PropertyGroup>

Similarly, Xamarin.Android now always uses the R8 code shrinker for projects that have $(AndroidEnableDesugar) set to true and that have the Code shrinker ($(AndroidLinkTool)) set to ProGuard or r8.

Note: $(AndroidEnableDesugar) does not correspond to any setting in the project properties pages in Visual Studio, so this change only affects project authors who have added the property to their .csproj files by hand.

Background information

This change allows Xamarin.Android to remove support for the old desugar_deploy.jar mechanism from the Android Jack toolchain that was deprecated in 2017.

Option for .NET exceptions from certain Android APIs

Several methods in Xamarin.Android override or implement .NET base class library methods but do not throw the expected exception types for those methods. For example, `Android.Runtime.InputSt...

Read more

Xamarin.Android 10.1.3.7

14 Jan 23:58
Compare
Choose a tag to compare

January 14, 2020 — Xamarin.Android 10.1.3.7 was released as part of Visual Studio 2019 version 16.4.3 and to the Stable updater channel of Visual Studio 2019 for Mac version 8.4.1.

Corresponding Visual Studio 2019 release notes

Issues fixed in Xamarin.Android 10.1.3.7

Application and library build and deployment

  • Developer Community 845978, GitHub 3993: Starting in Xamarin.Android 10.1, You uploaded an APK or Android App Bundle with invalid or missing signing information for some of its files prevented uploading successfully to Google Play for apps built using the Android App Bundle publishing format.

Application Mono Framework behavior on device and emulator

This version of Xamarin.Android updates the Mono 6.6 runtime and class libraries from Commit bef1e633 to Commit fd9f379d, adding 3 new commits.

Fixes included for issues reported with Xamarin.Android applications:

  • Developer Community 756697: Starting in Xamarin.Android 10.0, NTLM authentication in Xamarin.Android apps no longer worked, resulting in server-side System.ComponentModel.Win32Exception exceptions.

Installing

To get the new version in Visual Studio, update Visual Studio:

For other scenarios, the commercial .vsix and .pkg installer packages can be found in the project README.

Mono version for continuous build environments

For users installing Xamarin.Android on macOS continuous build environments, the corresponding version of the Mono Framework MDK to use is Mono Framework MDK 6.6.0.155.

Open source

Xamarin.Android 10.1.1.0

10 Dec 22:44
Compare
Choose a tag to compare

January 8, 2020 — Xamarin.Android 10.1.1.0 was released to the Stable updater channel of Visual Studio 2019 for Mac version 8.4.

December 10, 2019 — Xamarin.Android 10.1.1.0 was released as part of Visual Studio 2019 version 16.4.1.

Mono Framework version update

This version of Xamarin.Android updates the Mono 6.6 runtime and class libraries from Commit e1ef7743 to Commit bef1e633, adding 9 new commits.

This update does not contain any changes that affect Xamarin.Android. The update just keeps the Mono commit aligned with Xamarin.iOS, Xamarin.Mac, and Visual Studio for Mac.

Mono version for continuous build environments

For users installing Xamarin.Android on macOS continuous build environments, the corresponding version of the Mono Framework MDK to use is Mono Framework MDK 6.6.0.155.

Xamarin.Android 10.2.0.16

03 Dec 21:28
Compare
Choose a tag to compare
Pre-release

December 3, 2019 — Xamarin.Android 10.2.0.16 was released as part of Visual Studio 2019 version 16.5 Preview 1.

Important: The names for generated Java types are different in this release. Any project that explicitly uses one of the old names that starts with md5 will need to be updated by hand to account for this change. See Breaking change for generated Java type names below for more details.

Corresponding Visual Studio 2019 Preview release notes

What's new

Breaking change for generated Java type names

The fallback option in Xamarin.Android 10.1 that allowed using the old style of generated Java type names that started with md5 has now been removed.

Authors of projects that include literal uses of generated Java type names that start with md5 will now need to transition to alternatives like the [Register] attribute and the [Activity] attribute.

Projects that have the LowercaseMD5 fallback option set in the $(AndroidPackageNamingPolicy) MSBuild property will now fail to build with the following error:

error XAGJS7015: System.NotSupportedException: PackageNamingPolicy.LowercaseHash is no longer supported.

To resolve the error, remove the section for the $(AndroidPackageNamingPolicy) property from your .csproj file:

<PropertyGroup>
  <AndroidPackageNamingPolicy>LowercaseMD5</AndroidPackageNamingPolicy>
</PropertyGroup>

See the Xamarin.Android 10.1 release notes for additional background information about this change and examples of how to update existing projects.

Build and deployment performance

  • GitHub PR 3692: For the specific scenario of Debug builds that have Use Fast Deployment enabled, undo part of the change from GitHub PR 2718 so that type mappings are parsed at run time instead of being compiled into unmanaged native shared libraries. This reduced the time for the GenerateJavaStubs task from about 540 milliseconds to about 320 milliseconds for an incremental build of a test app where the MainActivity type was modified between builds. As expected, this did increase the app startup time from about 1.30 seconds to about 1.35 seconds, but that still left an overall savings of approximately 170 milliseconds.
  • GitHub PR 3856: Add a fallback naming scheme for the files that mark whether the outputs of the _CompileAndroidLibraryResources target are up-to-date with the input files. This allows projects that use a google-services.json item and that are configured to use AAPT2 to skip the _CompileAndroidLibraryResources target correctly during incremental builds.
  • GitHub PR 3889: Update the _GeneratePackageManagerJavaForDesigner target to check the timestamp of the MonoPackageManager_Resources.java output file instead of the old obsolete MonoPackageManager.java file that was used in Xamarin.Android 9.3 and earlier. This reduced the total time for the SetupDependenciesForDesigner target by about 500 milliseconds for a small app on a test system. The SetupDependenciesForDesigner targets runs in the background for interactive scenarios in Visual Studio after an Android resource has changed.
  • GitHub PR 3891: Avoid unnecessary changes to the build.props intermediate file during design-time builds so that the UpdateGeneratedFiles and SetupDependenciesForDesigner targets can skip the _ResolveLibraryProjectImports target. This reduced the time for the UpdateGeneratedFiles target by about 300 milliseconds for a small app on a test system. The UpdateGeneratedFiles target runs in the foreground each time an Android resource is saved, so this makes Visual Studio more responsive when working on Android resources.

App startup performance

  • GitHub PR 3729: Initialize application logging and uncaught exception handling lazily. This reduced the time to display the first screen of a small test Xamarin.Forms app from about 783 milliseconds to about 754 milliseconds for a Release configuration build on a Google Pixel 3 XL device.
  • GitHub PR 3780: Simplify how Android system properties are looked up for internal uses within the Xamarin.Android runtime. This cut off about 1 millisecond from the total app startup time.

D8 enabled by default for all projects

Xamarin.Android has included an option to use the D8 DEX compiler since Xamarin.Android 9.2, but is has so far been disabled by default to provide a gradual path for finding and addressing compatibility issues. Starting in Xamarin.Android 10.2, the D8 DEX compiler option is now enabled by default for both existing and new projects.

To switch back from D8 to the earlier DX compiler for a particular project, set the Dex compiler option in the Visual Studio project property pages to dx, or set the $(AndroidDexTool) MSBuild property to dx by hand in your .csproj file:

<PropertyGroup>
  <AndroidDexTool>dx</AndroidDexTool>
</PropertyGroup>

Android App Bundle publishing format workflow improvements

Xamarin.Android 10.2 adds two improvements to the support for Android App Bundle publishing format to align it more closely with the support for the APK publishing format.

The first change is that the Xamarin.Android MSBuild targets now copy the unsigned .aab file to the output directory. Previously, only the signed .aab file was copied to the output directory. The unsigned file can be useful in continuous integration environments where you might want to build just the PackageForAndroid MSBuild target to generate an unsigned .aab file that you can sign in a separate step.

This change resolve the following issue:

  • GitHub 3804: Building the PackageForAndroid target, for example by running msbuild -restore -p:Configuration=Release -t:PackageForAndroid, does not output an unsigned .aab file to the output path in projects configured to use the Android App Bundle publishing format.

The second change is that the directory name for the mono-symbolicate .pdb symbol file archive now ends with the expected .aab.mSYM extension instead of .apk.mSYM.

Mono Framework version update

This version of Xamarin.Android updates the Mono 6.6 runtime and class libraries from Commit e1ef7743 to Commit 062f0ab8, adding 1 new commit.

This update does not contain any changes that affect Xamarin.Android. The update just keeps the Mono commit aligned with Xamarin.iOS, Xamarin.Mac, and Visual Studio for Mac.

XA2001 error for nonexistent Android resources

Xamarin.Android 10.2 adds a new XA2001 build error to identify cases where projects might unintentionally include references to Android resource file paths that do not exist. Example:

error XA2001: Source file 'Resources\layout\missing.xml' could not be found.

Before this change, projects that included references to nonexistent Android resources would rebuild the _CompileResources and _UpdateAndroidResgen targets on every build. The new error protects against this by ensuring that project authors remove references to nonexistent resources.

AAPT2 version update to 3.5.0-5435860

The version of the...

Read more