¿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"?

Dentro del archivo .apk no es un archivo .dll único.

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.

  • MvvmCross Navegar a ViewModel en la notificación de Android haga clic
  • Error incluso si la aplicación parece no estar instalada
  • Xamarin Android deserializa el archivo json local
  • Xamarin Studio Android App "aapt.exe" salió con el código -1073741819 error MSB6006:
  • Cómo inflar una vista en expansión con una vista de relación de aspecto fija
  • Xamarin Android: Compartir imagen a través de la API estándar (correo electrónico, facebook, etc.)
  • ¿Cómo se puede ejecutar Xamarin Android Player de Visual Studio 2015?
  • Tiempo de espera de espera para el resultado de ClearAppData2 al ejecutar Xamarin UI Tests for Android
  • AlarmManager sólo funciona en un futuro próximo
  • Obfuscation en proyectos de Xamarin
  • Mono para Android - Todas las actividades en orientación vertical
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.