Xamarin.Android 9.0 Release Notes
System Requirements | What's New | Blogs | Open Source
Installing
- Visual Studio 2017 version 15.8 – Visual Studio Installer
- Visual Studio 2017 for Mac version 7.6 – Stable updater channel
Feedback welcome
Your feedback is important to us. If there are any problems with this release, check our
GitHub Issues,
Xamarin.Android Community Forums and
Visual Studio Developer Community
for existing issues. For new issues within the Xamarin.Android SDK, please report a
GitHub Issue.
For general Xamarin.Android experience issues, let us know via the
Report a Problem
option found in your favorite IDE via Help -> Report a Problem
.
Release History
- August 29, 2018 - Xamarin.Android 9.0.0.20 (Visual Studio 2017 version 15.8.2)
- August 23, 2018 - Xamarin.Android 9.0.0.19 (Visual Studio 2017 for Mac version 7.6.1)
- August 14, 2018 - Xamarin.Android 9.0.0.18 (Visual Studio 2017 version 15.8)
You can learn more about how we ship our releases in the Visual Studio 2017 Release Rhythm document.
August 29, 2018 - Xamarin.Android 9.0.0.20
This version is included in the Visual Studio 2017 version 15.8.2 Servicing Update
Issues Fixed
- Mono 8627: The instruction pointer of the currently executing method is not on the recorded stack
- Mono 8848: Error when debugging.
- Mono 9262: App terminates : "Failed to Stop app: An error occured on client IDB4100448 while executing a reply for topic xvs/idb/4.10.0.448/stop-app"
Integrated Mono Features/Fixes
Xamarin.Android uses Mono 5.12 Commit c5b8988d
August 23, 2018 - Xamarin.Android 9.0.0.19
This version is included in the Visual Studio 2017 for Mac version 7.6.1 release.
Issues Fixed
- GitHub 2007:
Release build with Proguard on Mac fails on
PROGUARD : warning : there were 38 unresolved references to classes or interfaces.
and"java" exited with code 1.
August 14, 2018 - Xamarin.Android 9.0.0.18
This version is included in the Visual Studio 2017 version 15.8 release.
Issues Fixed
- Bugzilla 7505
FileNotFoundException
when probing assemblies should provide more context. - Bugzilla 59046
Bindings Generator fails with
[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentNullException: Value cannot be null.
- GitHub 1374 Xamarin Android Lint checks fail on Windows when ran against a very simple app
- GitHub 1400
BCL test
TaskSchedulerTests.GetTaskSchedulersForDebugger_ReturnsDefaultScheduler()
fails when the linker is enabled. - GitHub 1405: When "Use Shared Runtime" is unchecked, any code changes aren't picked up.
- GitHub 1438: Cannot find FSharp.Core or one of its dependencies during testing
- GitHub 1511
Unstable framework versions are used when
$(AndroidUselatestPlatformSDK)
=true - GitHub 1519 Deploying to Android fails with zipalign error
- GitHub 1532 Error: Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Microsoft.Azure.Services.AppAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Perhaps it doesn't exist in the Mono for Android profile?
- GitHub 1541
Aapt2 Task fails with
Error Access to the path 'obj\Debug\monoandroid81\android\src' is denied
. - GitHub 1544:
Android.Runtime.ResourceIdManager.UpdateIdValues()
called multiple times, adds 23 seconds to application startup. - GitHub 1651: Bundled app initialization error
- GitHub 1642
ValidateJavaVersion
should check both java and javac version - GitHub 1652
Links against ABI-unstable system
Mono.Cecil
- GitHub 1669 Getting build failure for Cheesesquare sample in both debug and release mode
- GitHub 1670 (workaround): Updating to Visual Studio Community 7.5 on macOS causes ambiguous resource layouts
- GitHub 1678:
New
error CS2001: Source file '...\obj\Debug\generated\' could not be found.
errors on rebuilding projects. - GitHub 1698: Build warning: Name cannot begin with the '$' character
- GitHub 1711: Unable to inflate a layout which has custom controls with mixed naming casing and is included through a library project reference
- GitHub 1727: Deployment failures throw instead of declaring an Error + ErrorCode.
- GitHub 1748:
_CreateAapt2VersionCache
target always runs on master - GitHub 1770:
Unable to build project with a
$(TargetFrameworkVersion)
less than Android 5.0 on Windows with$(AndroidUseAapt2)
=True. - GitHub 1824:
Cleaning no longer removes app project assembly and
.pdb
files from$(IntermediateOutputPath)
on macOS. - GitHub 1831:
TypeManager.RegisterType()
doesn't use type mappings. - GitHub 1832:
JNINativeWrapper
shouldn't use Guids. - GitHub 1888: Large libraries in binding causing dx error with too large of main dex file.
- GitHub 1962:
- GitHub 1780:
Aapt2 throws an error if a
Resources/values/*
file contains a dash - GitHub 1784: Intellisense can't recongize 'Resource.Dimension' definition.
- GitHub 1814: Secondary builds after touching .cs files in an app and library project are now slower in 15.8.
- GitHub 1816: No longer able to compile Mono.Android-Tests.csproj on macOS against d15-8.
- GitHub 1822:
Allow storing native libs uncompressed in the
.apk
. - Mono 8282:
respect maximum length of a message when using
__android_log_write()
- (community link):
JNI local reference table overflow issue in Xamarin Android and
NetworkInterface.OperationalStatus
. - (community link):
MSBuild failure in
<ResolveLibraryProjectImports/>
task. - Fix Code-Behind code generation for layouts with non-element root nodes, e.g. XML comments.
Integrated Mono Features/Fixes
Xamarin.Android uses Mono 5.12 Commit 4fe3280b
What's New in this Release
Android Pie Support (API 28)
We're excited to announce Xamarin.Android support for Android Pie (API 28).
Android Pie introduces new features including display cutout support,
notification enhancements, multi-camera support, AnimatedImageDrawable
, and
much more.
Aapt2
Xamarin.Android has Experimental support for the
Android Asset Packaging Tool v2.0.
aapt2
allows for faster project rebuilds when an Android Resource
or Android Asset changes. This will not help with initial project builds:
Tool | Clean Build | Build Touching only C# | Build Touching only Resources |
---|---|---|---|
Aapt | 00:00:51.74 | 00:00:08.91 | 00:00:25.26 |
Aapt2 | 00:00:50.70 | 00:00:08.64 | 00:00:08.44 |
Aapt2 support is currently disabled by default. To enable it, please set
the $(AndroidUseAapt2)
MSBuild property to True within your .csproj
:
<PropertyGroup>
<AndroidUseAapt2>True</AndroidUseAapt2>
</PropertyGroup>
Enabling Aapt2 support requires that Aapt2 be installed; it is included in the
Android SDK build-tools 25.0.2 package or later. If aapt2
cannot be found,
then an XA0112 warning will be logged, and aapt
will be used instead.
If aapt2 version
returns an unrecognized value, then aapt2
support will be
disabled, an XA0111 warning will be logged, and aapt
will be used instead.
Binding Assemblies and $(AndroidCodegenTarget)
Xamarin.Android 9.0 changes the default value of the $(AndroidCodegenTarget)
MSBuild property within Bindings Libraries to XAJavaInterop1
, from
XamarinAndroid
.
This change results in binding assemblies which are smaller, faster, and generate less garbage during invocations.
Unfortunately, this change means that the resulting binding assemblies cannot be used with Xamarin.Android 6.0 and earlier. Xamarin.Android 6.0 is over 2.5 years old at this point, so we do not believe that this will be a significant problem.
Bindings and Code-Behind
To make Android development more pleasant when working with Android Resources, we've provided two new features known as bindings and code-behind.
To enable these new features, set the $(AndroidGenerateLayoutBindings)
MSBuild
property to True
in your .csproj file:
<PropertyGroup>
<AndroidGenerateLayoutBindings>true</AndroidGenerateLayoutBindings>
</PropertyGroup>
Bindings
Bindings generates a class per each Android layout file which contains strongly
typed properties for all of the Android Resource Ids in the layout file. This
allows you to instantiate a new Binding
to then access your respective View
classes in your resource file without calling FindViewById()
.
For example, take the following layout file:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xamarin="http://schemas.xamarin.com/android/xamarin/tools">
<Button android:id="@+id/myButton" />
<fragment
android:id="@+id/log_fragment"
android:name="commonsamplelibrary.LogFragment"
xamarin:managedType="CommonSampleLibrary.LogFragment"
/>
<fragment
android:id="@+id/secondary_log_fragment"
android:name="CommonSampleLibrary.LogFragment"
/>
</LinearLayout>
You would then access the binding in your Activity to provide your Views:
partial class MainActivity : Activity {
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Main);
var binding = new Binding.Main (this);
Button button = binding.myButton;
button.Click += delegate {
button.Text = $"{count++} clicks!";
};
}
}
Code-Behind
Code-behind generates a partial
class that contains strongly typed properties
for all of the Android Resource Ids in the layout file. Code-behind builds
on-top of the Binding mechanism in which you can opt-in to Code-Behind
generation using our new xamarin:classes
XML attribute which is a ;
separated list of full class names to be generated.
For example, take the following layout file:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xamarin="http://schemas.xamarin.com/android/xamarin/tools"
xamarin:classes="Example.MainActivity">
<Button android:id="@+id/myButton" />
<fragment
android:id="@+id/log_fragment"
android:name="commonsamplelibrary.LogFragment"
xamarin:managedType="CommonSampleLibrary.LogFragment"
/>
<fragment
android:id="@+id/secondary_log_fragment"
android:name="CommonSampleLibrary.LogFragment"
/>
</LinearLayout>
You would then access Views in your Activity directly:
partial class MainActivity : Activity {
protected override void OnCreate (Bundle savedInstanceState)
{
base.OnCreate (savedInstanceState);
SetContentView (Resource.Layout.Main);
myButton.Click += delegate {
button.Text = $"{count++} clicks!";
};
}
}
For more information about this feature, please see our documentation here: https://github.com/xamarin/xamarin-android/blob/master/Documentation/guides/LayoutCodeBehind.md
OSS Core
Xamarin.Android 9.0 is based on the open-source Xamarin.Android repositories:
- Core JNI interaction logic is in the Java.Interop repo
- Android bindings and MSBuild tooling are in the xamarin-android repo.
- Chat is in the
xamarin/xamarin-android
Gitter channel.