Mono for Android - How It works?
我发现Xamarin应用程序在Android上的Mono runtinme中运行,并且一切都传递给了Dalvik。但是我不能不明白的是,该应用程序如何在Mono中运行,而普通的应用程序如何在Dalvik中执行。 Mono应用程序的不同之处在于它可以在Mono中运行,而不能在Dalvik中运行。
Mono如何与Dalvik处于同一水平?我认为Mono应该以某种方式存储在Dalvik中运行的应用程序中。
请向我解释这是怎么回事,对不起我的语言不好。
- 我不知道为什么会有如此之多的否决票和关闭问题的请求?如果答案如此明显,请尽快做出回答
-
由于Mono和Dalvik / Android都具有开放源代码性质,而Xamarin.Android不是开放源代码,因此您对技术细节的疑问只会导致怀疑您的意图。您真的对技术细节感到好奇,还是打算从头克隆它? SO是进行知识交流的地方,但我不认为这是进行逆向工程的地方。顺便说一句,我还没有否决你的问题。
由xamarin开发的应用程序具有mono运行时,它将它带到设备上。该应用程序apk包含.net中间代码p代码,这显然是Dalvik无法理解的。
Xamarin.Android开发人员可以通过调用他们知道的.NET API(用于低级访问)来访问操作系统中的各种功能,也可以使用Android名称空间中提供的类(这些类提供了到Java API的桥梁)来访问操作系统中的各种功能。由Dalvik公开。
http://docs.xamarin.com/guides/android/under_the_hood/architecture/在这里您可以找到更多详细信息。
- 好,我明白了。但是,当我运行普通的Java应用程序时,它将在Dalvik中运行。应用程序中的某些内容指定它将在哪个运行时中运行?我不明白的是,当应用中包含Mono时,Dalvik如何与Mono处于同一级别
-
当您有用Java编写的android应用时,它们会被编译为字节码。然后将它们从JVM兼容的Java类文件转换为Dalvik兼容的.dex和odex文件,然后再安装到设备上。但是在这里,您有使用C#编写的应用程序。因此,需要可以处理c#程序集的东西,这显然是单声道的。提供Mono运行时的MFA(用于Android的Mono)可以package内容并调用Dalvik运行时,甚至可以完全绕开Dalvik。将会发生什么取决于代码。
-
现在,默认情况下,Android设备上不存在Mono。因此,必须有一种方法可以将其放置在设备上并在设备上运行。因此,应用程序包是实现此目的的一种明显方式。甚至我们可以让Mono运行,从而可以运行我们的应用程序。如果可以以某种方式帮助您,请接受答案。