2011-12-06 46 views
9

我目前使用Monodroid開發Android應用程序。我是相當新的手機應用,因此感到困惑了幾件事情:Android應用程序中的C#.dll庫

  1. 什麼顧名思義是一款Android庫?我使用Mono模板創建Android庫:爲Android類庫創建Mono =>編寫代碼並構建到.dll =>使用Visual Studio中的模擬器運行,並且它在模擬器中正常工作。但.dll文件是一個android庫嗎?或者它在模擬器上工作之前由Mono轉換,而'REAL'android庫應該是JAR?

  2. 我可以直接使用我定義的用C#編寫的.dll來製作這個應用程序嗎?我在單聲道中直接引用它在我的android應用程序中嘗試過它,它正在構建,沒有錯誤。但是當模擬器運行這個應用程序時,它會被刪除(仍然沒有錯誤) - 在Android應用程序項目中使用c#.dll的正確方法是什麼?

我知道有相當多的情侶主題討論C#和Android之間約單,但仍然在讀我後鏈接不能與此庫引用問題得到解決,如果任何人能提供任何提示/想法將是最讚賞

回答

3
  1. 生成的DLL是基於Moonlight(Mono的Silverlight實現)的Mono for Android profile編譯的。在運行時,.NET代碼直接運行在運行時爲part of your application的Mono運行時。當.NET代碼從Java端子類(例如Java.Lang.Object)中產生子類時,Mono for Android生成callable wrappers來處理運行時間之間的通信。
  2. 從技術上講,您可以在您的Mono for Android應用程序中使用正常的.NET DLL,但我不會推薦它。 Mono爲Android提供的配置文件遠遠小於完整的.NET框架(甚至不完全等同於Silverlight的配置文件),因此如果您的DLL引用了Mono for Android中未找到的方法,那麼您的應用程序將崩潰。相反,我會建議爲您的應用程序創建一個單獨的類庫,並使用文件鏈接跨項目共享源文件。我的blog post here包含了一個如何做到這一點的例子。
+0

謝謝你的回答!因此,因爲.NET代碼是針對Mono運行時運行的,這是否意味着,該DLL只能用於android應用程序,提供了安裝的Monodroid SDK?因爲我的主要目標不是應用程序,而是將一些C#庫移植到android庫並將它們提供給android開發人員。在這種情況下,這是否意味着即使我成功地使dll與android兼容,他們仍然需要Monodroid來執行運行時包裝? – lynnyilu

+0

這是正確的 - 使用Mono for Android編譯的DLL只會對使用Mono for Android構建的應用程序有用。 –

+0

如果你想爲開發者提供一個庫,那麼你應該爲該平臺編譯一個dll。只要你使用支持的類,你就可以支持多種平臺。理論上** Math.Round **將在所有平臺上完全相同。這假定Mono實現與所有輸入的Microsoft .NET實現相匹配(可能會因爲他們對其進行了單元測試而進行測試)。 –