¿Cómo puedo migrar mi aplicación a la versión 5.0 de Xamarin.Forms?
Xamarin.Forms 5.0 incluye los siguientes cambios importantes:
Expander
se ha movido al kit de herramientas de la comunidad de Xamarin. Para obtener más información, consulte Características movidas de Xamarin.Forms.MediaElement
se ha movido al kit de herramientas de la comunidad de Xamarin. Para obtener más información, consulte Características movidas de Xamarin.Forms.- DataPages y los proyectos asociados se han quitado de Xamarin.Forms.
- Se ha cambiado el nombre de
MasterDetailPage
aFlyoutPage
. Del mismo modo, se ha cambiado el nombre de la enumeraciónMasterBehavior
aFlyoutLayoutBehavior
. - Las referencias a
UIWebView
se han quitado de Xamarin.Forms en iOS. - Se ha quitado la compatibilidad con Visual Studio 2017.
- XFCorePostProcessor.Tasks se ha quitado. Este proyecto insertó IL para mantener la compatibilidad con Xamarin.Forms 2.5.
Además, los proyectos de Android y UWP creados con Xamarin.Forms la versión 5.0 requerirán la actualización.
Importante
Al actualizar una aplicación a Xamarin.Forms 5.0, asegúrese de actualizar cada proyecto que haga referencia al paquete NuGet de Xamarin.Forms a una versión idéntica.
Android
Los proyectos de Android creados con Xamarin.Forms 5.0 requieren que haya instalado la plataforma AndroidX (Android 10.0) en su entorno de desarrollo. Esto se puede lograr con el administrador de Android SDK. Para obtener más información sobre AndroidX, consulte Migración de AndroidX en Xamarin.Forms.
A continuación, los proyectos de Android requerirán varias actualizaciones para compilarse correctamente.
Minimum TargetFrameworkVersion
Xamarin.Forms 5.0 requiere una versión mínima del marco de destino de 10.0 (AndroidX) para proyectos de Android. La versión de la plataforma de destino se puede establecer en Visual Studio o en el archivo .csproj de Android:
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
Se producirá un error de compilación si no se cumple este requisito mínimo:
error XF005: The $(TargetFrameworkVersion) for MyProject.Android (v9.0) is less than the minimum required $(TargetFrameworkVersion) for Xamarin.Forms (10.0). You need to increase the $(TargetFrameworkVersion) for MyProject.Android.
TargetSDKVersion mínimo
AndroidX requiere que el manifiesto de Android establezca en targetSdkVersion
29+:
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
Si no se hace esto, el targetSdkVersion
se establecerá en el minSdkVersion
. Además, en algunas circunstancias, se producirá un Android.Views.InflateException
si el targetSdkVersion
no está configurado correctamente:
Android.View.InflateException has been thrown.
Binary XML file line #1 in com.companyname.myproject:layout/toolbar: Binary XML file line #1 in com.companyname.myproject:/layout/toolbar: Error inflating class android.support.v7.widget.Toolbar
Nota:
En Visual Studio 2019, el manifiesto de Android se actualizará automáticamente para especificar una targetSdkVersion
de API 29 cuando la versión de la plataforma de destino esté establecida en v10.0.
Migración automática a AndroidX
Si el proyecto de Android hace referencia a bibliotecas compatibles con Android, ya sea como dependencias directas o dependencias transitivas, estas dependencias y enlaces de biblioteca de compatibilidad se intercambian automáticamente con dependencias de AndroidX durante el proceso de compilación. Para obtener más información sobre la migración automática de AndroidX, consulte Migración automática en Xamarin.Forms.
Migración manual a AndroidX
Si el proyecto de Android no tiene dependencias directas o transitivas en bibliotecas de soporte técnico de Android, pero sigue intentando consumir tipos de biblioteca de soporte técnico a través del código, tendrá que migrar manualmente la aplicación a AndroidX. Esto se puede lograr mediante tipos AndroidX y quitando los archivos AXML que no haya personalizado.
Sugerencia
La migración manual a AndroidX dará lugar al proceso de compilación más rápido para la aplicación.
Uso de tipos de AndroidX
AndroidX reemplaza las bibliotecas de compatibilidad de Android y, por tanto, las referencias a los tipos de biblioteca de soporte técnico de Android deben reemplazarse por referencias a tipos AndroidX.
Esto se puede lograr mediante la actualización de las instrucciones using
para usar espacios de nombres AndroidX
, en lugar de espacios de nombres Android.Support
. En la tabla siguiente se enumeran algunos de los cambios comunes del espacio de nombres al pasar de las bibliotecas de compatibilidad de Android a AndroidX:
Espacio de nombres de la biblioteca de compatibilidad de Android | Espacio de nombres de AndroidX |
---|---|
Android.Support.V4.App |
AndroidX.Core.App |
Android.Support.V4.Content |
AndroidX.Core.Content |
Android.Support.V4.App |
AndroidX.Fragment.App |
Android.Support.V7.App |
AndroidX.AppCompat.App |
Android.Support.V7.Widget |
AndroidX.AppCompat.Widget |
Para obtener una lista completa de las asignaciones de clases de bibliotecas de soporte técnico a AndroidX, consulte Asignaciones de clases de AndroidX en github.com. Para obtener una lista completa de las asignaciones de ensamblados de bibliotecas de soporte técnico a AndroidX, consulte Ensamblados de AndroidX en github.com
Eliminación de archivos AXML
Debe eliminar los archivos AXML del proyecto de Android, siempre que no use archivos AXML personalizados. Después de la eliminación, se deben quitar las siguientes líneas de la clase MainActivity
:
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
Importante
Los proyectos de Android con archivos AXML personalizados deben actualizarse para que estos archivos usen tipos AndroidX.
UWP
Xamarin.Forms 5.0 recomienda una versión de plataforma de destino de >= 10.0.18362.0 para proyectos de UWP. La versión de la plataforma de destino se puede establecer en Visual Studio o en el archivo .csproj de UWP:
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.18362.0</TargetPlatformVersion>
Se producirá una advertencia de compilación si el proyecto de UWP usa una versión de plataforma de destino inferior.