內嵌組件 Bundle Assemblies
內嵌組件
Bundle Assemblies 這是甚麼呢? 當啟用這項功能,該專案內的組件將會內嵌進入到原生共享資料庫內,這樣的話,可以保護你開發的組件,不會被輕易地透過反組譯 IL 碼到原始程式碼;不過,這並不代表經過了啟用內嵌組件功能之後,該專案內的所有組件都會編譯成為原生程式碼,這些組件還是IL程式碼。若你真的需要將組件轉換成為原生程式碼,可以嘗試使用 AOT編譯功能。想要使用這項功能,你必須要擁有 Visual Studio Enterprise的使用授權。
如何使用內嵌組件
透過底下過程,可以了解如何啟用內嵌組件這項功能,並且了解到有內嵌組件與無內嵌組件所產生的軟體配送檔案有何不同;在這篇文章中,將會使用 Android 平台作為展示範例。- 首先,建立一個 Xamarin.Forms 的跨平台專案
- 並且設定 Android 專案為預設專案,切換編譯組態為 Release 模式
- 滑鼠雙擊 Android 專案內的
Properties
節點,切換到Android Options
標籤頁面,確認Use Shared Runtime
/Use Fast Deployment
/Bundle assemblies into native code
這三個選項是沒有啟用的。
- 接著,使用滑鼠右擊 Android 平台專案節點,選擇
Archive...
選項,此時,Archive Manager 視窗將會出現,請等候 Visual Studio 2015 建置完成該專案,就會出現下圖畫面。請點選Open Folder
按鈕,找到XFBundleAss.Droid.apk
檔案,將其複製到其他目錄下,並且命名為XFBundleAss.Droid 沒有內嵌組件.apk
;最後,將 Archive Manager 上的那個項目刪除掉。
- 滑鼠雙擊 Android 專案內的
Properties
節點,切換到Android Options
標籤頁面,確認Bundle assemblies into native code
這個選項是啟用的。 - 接著,使用滑鼠右擊 Android 平台專案節點,選擇
Archive...
選項,此時,Archive Manager 視窗將會出現,請等候 Visual Studio 2015 建置完成該專案,就會出現下圖畫面。請點選Open Folder
按鈕,找到XFBundleAss.Droid.apk
檔案,將其複製到其他目錄下,並且命名為XFBundleAss.Droid 有內嵌組件.apk
;最後,將 Archive Manager 上的那個項目刪除掉。 - 此時,您應該已經可以取得兩個檔案,分別是
XFBundleAss.Droid 沒有內嵌組件.apk
與XFBundleAss.Droid 有內嵌組件.apk
,這個時候,請使用 Zip 解壓縮工具,分別打開這兩個壓縮檔案。從下圖中,可以看出,上方的視窗,為這個XFBundleAss.Droid 有內嵌組件.apk
的壓縮檔案內容,而下方則是XFBundleAss.Droid 沒有內嵌組件.apk
這個壓縮檔案的內容。
其中,在XFBundleAss.Droid 沒有內嵌組件.apk
壓縮檔案內,可以看到assemblies
這個目錄,裡面就儲存了這個 Android 專案會使用到的所有組件檔案,進入到這個assemblies
目錄下,就會看到這些 .NET 組件檔案。
另外,在XFBundleAss.Droid 沒有內嵌組件.apk
壓所檔案內,進入到lib
目錄下,就會看到了這些 .NET 組件,已經該內嵌進入到原生共享資料庫內,也就是libmonodroid_bundle_app.so
- 對於 iOS 平台,Xamarin.iOS執行 AOT IL語言的編譯(這是iOS系統的限制)到 ARM指令集下,以便可以在 iOS 裝置下來執行,因此,在 iOS 平台下,也就沒有所謂的內嵌組件的設定需求。為什麼會這樣呢?可以回想一下,內嵌組件的主要目的是甚麼,就可以明瞭了。(內嵌組件的特色是不會編譯任何IL指令集到 ARM或者x86指令集,而僅僅將.NET組件內嵌到.so這種原生程式庫檔案内)
沒有留言:
張貼留言