2013-06-19 55 views
25

我嘗試瞭解Xamarin.iOS(MonoTouch)和Xamarin.Android(Android的Mono)是如何工作的。 我寫了一個小應用程序,並查看.app和.apk文件。Xamarin iOS和Android如何工作?

.app文件(iOS)的內部有很多.dll文件。但爲什麼? 在每個頁面和帖子上,我讀到他們說:該應用程序是本地執行的,沒有任何解釋。 有人可以向我解釋一下xamarin開發者用「本地」的意思嗎?

裏面的.apk文件的不是一個單一的.dll文件..

+0

iOS包中的dll僅僅是用於反射的元數據,而不是可執行代碼。查看http://stackoverflow.com/questions/10741319/how-secure-is-monotouch – Jason

回答

1

的Xamarin編譯束.NET運行時,輸出機(二進制)ARM可執行文件,打包爲iOS或Android應用程序。

+0

for android use jit – ArthNRick

9

的「天然」的定義Xamarin包括但不限於:被編譯成機器代碼,然後裝。應用程序

  • 的C#代碼的每一行。在運行時沒有JIT,因爲它被AOT壓制。更多信息可在

http://www.mono-project.com/AOT

中找到(請注意,Xamarin.Android仍然採用JIT,http://xamarin.com/how-it-works

  • 訪問本機平臺類型/ API是完全開放的,所以你不限於一小部分API調用(如果您使用HTML5/JavaScript,您知道有哪些限制)。

  • 您設計的用戶界面綁定到iOS(CocoaTouch)或Android(Skia)公開的本機API。沒有中間層損害表現或外觀。

至於什麼是.ipa或.apk,誰在乎?當然,@Jason的評論向我們展示了一些內部實現細節。

2

首先,Xamarin適用於在同一時間兩個不同的運行時間:

  • 本地運行時(Davlik,藝術,iOS的運行時)

一些示例。在Visual Studio中創建自己的C#類時,此類的實例將在Mono下運行。另外,當你從nuget下載Newton.Json包時,它也會在Mono中運行。這就是爲什麼我們可以使用所有酷.NET的東西。但是,當您從Java.Lang.Object(Android)或NSObject(iOS)繼承或製作自定義控件時,這些類的實例將在本機運行時運行。

其次,你可以注意到我們需要以某種方式綁定這兩個世界。讓我們來看看我們有什麼類型的對象。

  • 管理對象(單聲道)
  • Unmaneged對象(本機世界)
  • 同行對象(單聲道,對象是原生對象的包裝)

對等對象是Xamarin的SDK類的實例(例如活動,視圖控件,UILabels,TextViews等),您自己從Java.Lang.Object,NSObject,Fragment甚至UISegment類繼承的實例。

該機制是Xamarin最重要的事情之一。 PS:其實,我們使用Xamarin項目的JIT或AOT時使用哪一種編譯並不重要。它取決於平臺,並允許/不允許.NET世界的一些功能。這並不能說明Xamarin是如何工作的。

相關問題