¿Cómo funciona Xamarin iOS y Android?
Trato de entender cómo funcionan Xamarin.iOS (MonoTouch) y Xamarin.Android (Mono para Android). Escribí una pequeña aplicación y miré el archivo .app y .apk.
Dentro del archivo .app (iOS) hay muchos archivos .dll. ¿Pero por qué? En cada página y post leo, dicen: La aplicación se ejecuta nativa y no se interpreta nada. ¿Puede alguien explicarme lo que significa el desarrollador de xamarin con "nativo"?
- System.MissingMethodException: Método 'Android.Support.V4.Widget.DrawerLayout.AddDrawerListener' no encontrado
- Cómo recibir URL con filtros de intenciones Xamarin
- Xamarin Forms Android App Crashes ejecutando Debug con VS Android emulador
- Las pestañas de Android en fragmento con barra de herramientas de contracción
- Cómo configurar onclick oyente en xamarin?
Dentro del archivo .apk no es un archivo .dll único.
- Xamarin vs iOS nativo y Android
- Xamarin Forms Navegación de página MasterDetail causando un accidente en android , Funciona en iOS y UWP
- ContextCompat.GetColor no devuelve Color
- La variable de paso de Android de Xamarin de Actividad a Fragmento devuelve null
- No se puede usar el depurador para el proyecto androide de xamarin: System.IO.FileNotFoundException: No se pudo cargar el archivo o el ensamblado Mono.Posix
- Cómo crear un menú de opciones en android?
- Error: JNI ERROR (bug de la aplicación): se accede a la referencia global obsoleta
- ¿Cómo puedo eliminar los idiomas no utilizados del archivo APK final con Xamarin.Android?
La definición Xamarin de "nativo" incluye pero no se limita a:
- Cada línea de código C # se compila a código de máquina y luego se empaquetan en. No hay JIT en tiempo de ejecución, ya que es suprimido por AOT . Puede encontrar más información en
http://www.mono-project.com/AOT
(Tenga en cuenta que Xamarin.Android todavía utiliza JIT, http://xamarin.com/how-it-works )
-
El acceso a los tipos / API nativos de la plataforma está totalmente abierto, por lo que no se limita a un pequeño conjunto de llamadas a la API (si utiliza HTML5 / JavaScript, sabe qué tipo de limitaciones hay).
-
La interfaz de usuario que diseñes está vinculada a la API nativa expuesta por iOS (CocoaTouch) o Android (Skia). No hay una capa intermedia que perjudique el rendimiento o la apariencia.
En cuanto a lo que hay dentro de .ipa o .apk, ¿a quién le importa? Por supuesto @ comentario de Jason nos muestra de algunos detalles de implementación interna.
El compilador de Xamarin agrupa el tiempo de ejecución .NET y genera un ejecutable ARM nativo (binario), empaquetado como una aplicación iOS o Android.
En primer lugar, Xamarin trabaja en dos tiempos de ejecución diferentes al mismo tiempo:
- Mono
- Tiempo de ejecución nativo (Davlik, ART, tiempo de ejecución de iOS)
Un ejemplo. Cuando está creando su propia clase C # en Visual Studio, la instancia de esta clase se ejecutará en Mono. También cuando usted está descargando el paquete de Newton.Json de nuget, esto funcionará en mono también. Esta es la razón por la que podemos usar todas las cosas geniales de .NET. Sin embargo, cuando hereda Java.Lang.Object (Android) o NSObject (iOS) o realice un control personalizado, las instancias de estas clases se ejecutarán en tiempo de ejecución nativo.
En segundo lugar, usted puede notar que necesitamos atar estos dos mundos de alguna manera. Echemos un vistazo a qué tipo de objetos tenemos.
- Objetos administrados (Mono)
- Objetos no manipulados (Mundo nativo)
- Objetos pares (Mono, objetos que son envolturas para objetos nativos)
Objetos pares son instancias de clases de SDK de Xamarin (por ejemplo actividades, controles de vista, UILabels, TextViews, etc.), instancias de su propia herencia de clases Java.Lang.Object, NSObject, Fragment o incluso UISegment.
Ese mecanismo es una de las cosas más importantes de Xamarin.
PS: En realidad, no importa cuál de las compilaciones usamos para los proyectos Jamar o AOT de Xamarin. Depende de la plataforma y permite / no permite algunas características del mundo .NET. Eso no describe cómo funciona Xamarin.
- No puedo localizar el SDK de Android en mi computadora
- Glide no cargando imagen real y pegado con marcador de posición