我嘗試瞭解Xamarin.iOS(MonoTouch)和Xamarin.Android(Android的Mono)是如何工作的。 我寫了一個小應用程序,並查看.app和.apk文件。Xamarin iOS和Android如何工作?
.app文件(iOS)的內部有很多.dll文件。但爲什麼? 在每個頁面和帖子上,我讀到他們說:該應用程序是本地執行的,沒有任何解釋。 有人可以向我解釋一下xamarin開發者用「本地」的意思嗎?
裏面的.apk文件的不是一個單一的.dll文件..
我嘗試瞭解Xamarin.iOS(MonoTouch)和Xamarin.Android(Android的Mono)是如何工作的。 我寫了一個小應用程序,並查看.app和.apk文件。Xamarin iOS和Android如何工作?
.app文件(iOS)的內部有很多.dll文件。但爲什麼? 在每個頁面和帖子上,我讀到他們說:該應用程序是本地執行的,沒有任何解釋。 有人可以向我解釋一下xamarin開發者用「本地」的意思嗎?
裏面的.apk文件的不是一個單一的.dll文件..
的「天然」的定義Xamarin包括但不限於:被編譯成機器代碼,然後裝。應用程序
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的評論向我們展示了一些內部實現細節。
首先,Xamarin適用於在同一時間兩個不同的運行時間:
一些示例。在Visual Studio中創建自己的C#類時,此類的實例將在Mono下運行。另外,當你從nuget下載Newton.Json包時,它也會在Mono中運行。這就是爲什麼我們可以使用所有酷.NET的東西。但是,當您從Java.Lang.Object(Android)或NSObject(iOS)繼承或製作自定義控件時,這些類的實例將在本機運行時運行。
其次,你可以注意到我們需要以某種方式綁定這兩個世界。讓我們來看看我們有什麼類型的對象。
對等對象是Xamarin的SDK類的實例(例如活動,視圖控件,UILabels,TextViews等),您自己從Java.Lang.Object,NSObject,Fragment甚至UISegment類繼承的實例。
該機制是Xamarin最重要的事情之一。 PS:其實,我們使用Xamarin項目的JIT或AOT時使用哪一種編譯並不重要。它取決於平臺,並允許/不允許.NET世界的一些功能。這並不能說明Xamarin是如何工作的。
iOS包中的dll僅僅是用於反射的元數據,而不是可執行代碼。查看http://stackoverflow.com/questions/10741319/how-secure-is-monotouch – Jason