XAML in Xamarin.Forms 基礎篇 電子書

XAML in Xamarin.Forms 基礎篇 電子書
XAML in Xamarin.Forms 基礎篇 電子書

Xamarin.Forms 快速入門 電子書

Xamarin.Forms 快速入門 電子書
Xamarin.Forms 快速入門 電子書

2016/11/26

Xamarin.Forms 內嵌組件 Bundle Assemblies

內嵌組件 Bundle Assemblies

內嵌組件 Bundle Assemblies 這是甚麼呢? 當啟用這項功能,該專案內的組件將會內嵌進入到原生共享資料庫內,這樣的話,可以保護你開發的組件,不會被輕易地透過反組譯 IL 碼到原始程式碼;不過,這並不代表經過了啟用內嵌組件功能之後,該專案內的所有組件都會編譯成為原生程式碼,這些組件還是IL程式碼。若你真的需要將組件轉換成為原生程式碼,可以嘗試使用 AOT編譯功能。
想要使用這項功能,你必須要擁有 Visual Studio Enterprise的使用授權。

如何使用內嵌組件

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

沒有留言:

張貼留言