【问题标题】:How does Xamarin iOS and Android work?Xamarin iOS 和 Android 是如何工作的?
【发布时间】:2013-06-16 13:42:20
【问题描述】:
我尝试了解 Xamarin.iOS (MonoTouch) 和 Xamarin.Android (Mono for Android) 的工作原理。
我写了一个小应用程序并查看了 .app 和 .apk 文件。
.app 文件 (iOS) 内部有许多 .dll 文件。但为什么?
在我读到的每一页和帖子上,他们都说:应用程序是本地执行的,没有任何解释。
有人可以向我解释一下 xamarin 开发人员对“本机”的含义吗?
.apk 文件内部不是单个 .dll 文件..
【问题讨论】:
标签:
android
ios
mono
xamarin
【解决方案2】:
首先,Xamarin 同时在两个不同的运行时上工作:
- 单声道
- 本机运行时(Davlik、ART、iOS 运行时)
一些例子。在 Visual Studio 中创建自己的 C# 类时,此类的实例将在 Mono 下运行。此外,当您从 nuget 下载 Newton.Json 包时,它也将在 Mono 中运行。这就是为什么我们可以使用所有很酷的 .NET 东西的原因。但是,当您从 Java.Lang.Object (Android) 或 NSObject (iOS) 继承或制作自定义控件时,这些类的实例将在本机运行时下运行。
其次,你会注意到我们需要以某种方式绑定这两个世界。让我们看看我们有哪些类型的对象。
- 托管对象(单声道)
- 无人管理的物体(原生世界)
- 对等对象(Mono,作为原生对象包装器的对象)
对等对象是 Xamarin SDK 类的实例(例如活动、视图控件、UILabels、TextViews 等),您自己的从 Java.Lang.Object、NSObject、Fragment 甚至 UISegment 类继承的实例。
该机制是 Xamarin 中最重要的功能之一。
PS:实际上,对于 Xamarin 项目 JIT 或 AOT,我们使用哪种编译并不重要。它取决于平台并允许/不允许来自 .NET 世界的某些功能。这并没有描述 Xamarin 的工作原理。
【解决方案3】:
Xamarin 编译器捆绑 .NET 运行时并输出本机(二进制)ARM 可执行文件,打包为 iOS 或 Android 应用程序。