XAML in Xamarin.Forms 基礎篇 電子書

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

Xamarin.Forms 快速入門 電子書

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

2016/12/01

製作 Xamarin.Forms 的啟動畫面 Splash

想要針對三個平台 Android, iOS, UWP 應用程式,設定這三個平台的 Xamarin.Forms 的啟動畫面圖片,可以參考這篇文章。
http://codeworks.it/blog/?p=294

Xamarin.Forms 產生 System.TypeLoadException 錯誤訊息

今天,修改客戶的專案,在 Android 專案內,加入了 Splash 的功能,不過,只有在 MainActivity 內加入一個新的 Class,就沒有改任何其他程式碼。
這造成了原來可以正常執行的 Android 專案,卻無法正常執行,產生了 System.TypeLoadException 錯誤訊息。
要解決這個問題,也是相當的簡單,我是把模擬器中的這個應用程式,將其移除,重新佈署與執行,一切就正常了。

2016/11/30

Android.Support.V4.Widget.DrawerLayout.AddDrawerListener

當你第一次使用 Visual Studio 建立一個 Cross-Platform 的Xamarin.Forms專案,甚麼事都沒做,立即設定 Android 為預設專案,並且執行,不過,不好的消息是,你得到的底下錯誤訊息
stem.MissingMethodException: Method 'Android.Support.V4.Widget.DrawerLayout.AddDrawerListener' not found.
在此,請在該方案中,使用滑鼠右擊,選擇 管理方案的 NuGet 套件,將 Xamarin.Forms NuGet 套件升級到最新版本即可。


正在嘗試針對專案 'XFpop3' 及目標 '.NETPortable,Version=v4.5,Profile=Profile259' 收集封裝 'Xamarin.Forms.2.3.3.168' 的相依性資訊
收集相依性資訊花費了 2.31 sec
嘗試解析具有 DependencyBehavior 'Lowest' 之封裝 'Xamarin.Forms.2.3.3.168' 的相依性
在現有 packages.config 檔案中偵測到一或多個未解析的封裝相依性條件約束。必須解析所有相依性條件約束才能新增或更新封裝。若正在更新這些封裝,則可能會略過此訊息。若並非正在更新這些封裝,則下列錯誤可能會封鎖目前的封裝作業: 'Xamarin.Forms 2.2.0.45'
解析相依性資訊花費了 0 ms
正在解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作
已解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作


正在嘗試針對專案 'XFpop3.Droid' 及目標 'MonoAndroid,Version=v7.0' 收集封裝 'Xamarin.Forms.2.3.3.168' 的相依性資訊
收集相依性資訊花費了 11.73 sec
嘗試解析具有 DependencyBehavior 'Lowest' 之封裝 'Xamarin.Forms.2.3.3.168' 的相依性
在現有 packages.config 檔案中偵測到一或多個未解析的封裝相依性條件約束。必須解析所有相依性條件約束才能新增或更新封裝。若正在更新這些封裝,則可能會略過此訊息。若並非正在更新這些封裝,則下列錯誤可能會封鎖目前的封裝作業: 'Xamarin.Forms 2.2.0.45'
解析相依性資訊花費了 0 ms
正在解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作
已解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作


正在嘗試針對專案 'XFpop3.iOS' 及目標 'Xamarin.iOS,Version=v1.0' 收集封裝 'Xamarin.Forms.2.3.3.168' 的相依性資訊
收集相依性資訊花費了 2.24 sec
嘗試解析具有 DependencyBehavior 'Lowest' 之封裝 'Xamarin.Forms.2.3.3.168' 的相依性
在現有 packages.config 檔案中偵測到一或多個未解析的封裝相依性條件約束。必須解析所有相依性條件約束才能新增或更新封裝。若正在更新這些封裝,則可能會略過此訊息。若並非正在更新這些封裝,則下列錯誤可能會封鎖目前的封裝作業: 'Xamarin.Forms 2.2.0.45'
解析相依性資訊花費了 0 ms
正在解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作
已解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作


正在嘗試針對專案 'XFpop3.WinPhone' 及目標 'WindowsPhoneApp,Version=v8.1' 收集封裝 'Xamarin.Forms.2.3.3.168' 的相依性資訊
收集相依性資訊花費了 481.64 ms
嘗試解析具有 DependencyBehavior 'Lowest' 之封裝 'Xamarin.Forms.2.3.3.168' 的相依性
在現有 packages.config 檔案中偵測到一或多個未解析的封裝相依性條件約束。必須解析所有相依性條件約束才能新增或更新封裝。若正在更新這些封裝,則可能會略過此訊息。若並非正在更新這些封裝,則下列錯誤可能會封鎖目前的封裝作業: 'Xamarin.Forms 2.2.0.45'
解析相依性資訊花費了 0 ms
正在解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作
已解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作
正在還原 'XFpop3.UWP' 封裝。
正在還原 C:\Vulcan\GitBook\Temp\XFpop3\XFpop3\XFpop3.UWP\project.json 的封裝...
已成功完成 'XFpop3.UWP' 的封裝還原。


正在嘗試針對專案 'XFpop3.Windows' 及目標 'Windows,Version=v8.1' 收集封裝 'Xamarin.Forms.2.3.3.168' 的相依性資訊
收集相依性資訊花費了 463.89 ms
嘗試解析具有 DependencyBehavior 'Lowest' 之封裝 'Xamarin.Forms.2.3.3.168' 的相依性
在現有 packages.config 檔案中偵測到一或多個未解析的封裝相依性條件約束。必須解析所有相依性條件約束才能新增或更新封裝。若正在更新這些封裝,則可能會略過此訊息。若並非正在更新這些封裝,則下列錯誤可能會封鎖目前的封裝作業: 'Xamarin.Forms 2.2.0.45'
解析相依性資訊花費了 0 ms
正在解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作
已解析安裝封裝 'Xamarin.Forms.2.3.3.168' 的動作
正在從 'nuget.org' 擷取封裝 'Xamarin.Forms 2.3.3.168'。
已從 'packages.config' 中移除封裝 'Xamarin.Forms.2.2.0.45'
已成功從 XFpop3 解除安裝 'Xamarin.Forms.2.2.0.45'
正在將封裝 'Xamarin.Forms.2.3.3.168' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Forms.2.3.3.168' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Forms.2.3.3.168' 加入 'packages.config'
已成功將 'Xamarin.Forms 2.3.3.168' 安裝到 XFpop3
執行 NuGet 動作花費了 10.31 sec
在 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中找到封裝 'Xamarin.Forms 2.3.3.168'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.v4 23.3.0'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.v7.CardView 23.3.0'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.v7.RecyclerView 23.3.0'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.Vector.Drawable 23.3.0'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.Animated.Vector.Drawable 23.3.0'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.v7.AppCompat 23.3.0'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.Design 23.3.0'。
正在從 'nuget.org' 擷取封裝 'Xamarin.Android.Support.v7.MediaRouter 23.3.0'。
已從 'packages.config' 中移除封裝 'Xamarin.Android.Support.Design.23.0.1.3'
已成功從 XFpop3.Droid 解除安裝 'Xamarin.Android.Support.Design.23.0.1.3'
已從 'packages.config' 中移除封裝 'Xamarin.Android.Support.v4.23.0.1.3'
已成功從 XFpop3.Droid 解除安裝 'Xamarin.Android.Support.v4.23.0.1.3'
已從 'packages.config' 中移除封裝 'Xamarin.Android.Support.v7.AppCompat.23.0.1.3'
已成功從 XFpop3.Droid 解除安裝 'Xamarin.Android.Support.v7.AppCompat.23.0.1.3'
已從 'packages.config' 中移除封裝 'Xamarin.Android.Support.v7.CardView.23.0.1.3'
已成功從 XFpop3.Droid 解除安裝 'Xamarin.Android.Support.v7.CardView.23.0.1.3'
已從 'packages.config' 中移除封裝 'Xamarin.Android.Support.v7.MediaRouter.23.0.1.3'
已成功從 XFpop3.Droid 解除安裝 'Xamarin.Android.Support.v7.MediaRouter.23.0.1.3'
已從 'packages.config' 中移除封裝 'Xamarin.Forms.2.2.0.45'
已成功從 XFpop3.Droid 解除安裝 'Xamarin.Forms.2.2.0.45'
正在將封裝 'Xamarin.Android.Support.v4.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v4.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v4.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.v4 23.3.0' 安裝到 XFpop3.Droid
正在將封裝 'Xamarin.Android.Support.v7.CardView.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.CardView.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.CardView.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.v7.CardView 23.3.0' 安裝到 XFpop3.Droid
正在將封裝 'Xamarin.Android.Support.v7.RecyclerView.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.RecyclerView.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.RecyclerView.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.v7.RecyclerView 23.3.0' 安裝到 XFpop3.Droid
正在將封裝 'Xamarin.Android.Support.Vector.Drawable.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.Vector.Drawable.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.Vector.Drawable.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.Vector.Drawable 23.3.0' 安裝到 XFpop3.Droid
正在將封裝 'Xamarin.Android.Support.Animated.Vector.Drawable.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.Animated.Vector.Drawable.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.Animated.Vector.Drawable.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.Animated.Vector.Drawable 23.3.0' 安裝到 XFpop3.Droid
正在將封裝 'Xamarin.Android.Support.v7.AppCompat.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.AppCompat.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.AppCompat.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.v7.AppCompat 23.3.0' 安裝到 XFpop3.Droid
正在將封裝 'Xamarin.Android.Support.Design.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.Design.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.Design.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.Design 23.3.0' 安裝到 XFpop3.Droid
正在將封裝 'Xamarin.Android.Support.v7.MediaRouter.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.MediaRouter.23.3.0' 加入資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Android.Support.v7.MediaRouter.23.3.0' 加入 'packages.config'
已成功將 'Xamarin.Android.Support.v7.MediaRouter 23.3.0' 安裝到 XFpop3.Droid
封裝 'Xamarin.Forms.2.3.3.168' 已經存在於資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Forms.2.3.3.168' 加入 'packages.config'
已成功將 'Xamarin.Forms 2.3.3.168' 安裝到 XFpop3.Droid
正在從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.Design.23.0.1.3'
已從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.Design.23.0.1.3'
正在從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v4.23.0.1.3'
已從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v4.23.0.1.3'
正在從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v7.AppCompat.23.0.1.3'
已從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v7.AppCompat.23.0.1.3'
正在從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v7.CardView.23.0.1.3'
已從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v7.CardView.23.0.1.3'
正在從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v7.MediaRouter.23.0.1.3'
已從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Android.Support.v7.MediaRouter.23.0.1.3'
執行 NuGet 動作花費了 50.99 sec
在 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中找到封裝 'Xamarin.Forms 2.3.3.168'。
已從 'packages.config' 中移除封裝 'Xamarin.Forms.2.2.0.45'
已成功從 XFpop3.iOS 解除安裝 'Xamarin.Forms.2.2.0.45'
封裝 'Xamarin.Forms.2.3.3.168' 已經存在於資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Forms.2.3.3.168' 加入 'packages.config'
已成功將 'Xamarin.Forms 2.3.3.168' 安裝到 XFpop3.iOS
執行 NuGet 動作花費了 3.13 sec
在 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中找到封裝 'Xamarin.Forms 2.3.3.168'。
已從 'packages.config' 中移除封裝 'Xamarin.Forms.2.2.0.45'
已成功從 XFpop3.WinPhone 解除安裝 'Xamarin.Forms.2.2.0.45'
封裝 'Xamarin.Forms.2.3.3.168' 已經存在於資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Forms.2.3.3.168' 加入 'packages.config'
已成功將 'Xamarin.Forms 2.3.3.168' 安裝到 XFpop3.WinPhone
執行 NuGet 動作花費了 5.3 sec
Writing lock file to disk. Path: C:\Vulcan\GitBook\Temp\XFpop3\XFpop3\XFpop3.UWP\project.lock.json
正在產生 MSBuild 檔案 XFpop3.UWP.nuget.targets。
已成功將 'Xamarin.Forms 2.3.3.168' 安裝到 XFpop3.UWP
在 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中找到封裝 'Xamarin.Forms 2.3.3.168'。
已從 'packages.config' 中移除封裝 'Xamarin.Forms.2.2.0.45'
已成功從 XFpop3.Windows 解除安裝 'Xamarin.Forms.2.2.0.45'
封裝 'Xamarin.Forms.2.3.3.168' 已經存在於資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages'
已將封裝 'Xamarin.Forms.2.3.3.168' 加入 'packages.config'
已成功將 'Xamarin.Forms 2.3.3.168' 安裝到 XFpop3.Windows
正在從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Forms.2.2.0.45'
拒絕存取路徑 'C:\Vulcan\GitBook\Temp\XFpop3\packages\Xamarin.Forms.2.2.0.45\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.Build.Tasks.dll'。
拒絕存取路徑 'Xamarin.Forms.Build.Tasks.dll'。
已從資料夾 'C:\Vulcan\GitBook\Temp\XFpop3\packages' 中移除封裝 'Xamarin.Forms.2.2.0.45'
執行 NuGet 動作花費了 6.11 sec
========== 已完成 ==========
經過時間: 00:01:47.0749866

Xamarin.Forms 圖片雙指縮放 Image Zoom

若想要在 Xamarin.Forms 核心PCL 專案內,針對圖片可以啟用雙指縮放功能,這裡有個簡單的方式,只要在專案內實作了 MultiTouchBehavior 這個行為 Behaviors,就可以直接在 XAML 內,設定 Image View 的 Behaviors 的屬性,啟用這個行為功能,如下所示:
                <Image Source="desert.jpg" BindingContext="{Binding}">
                    <Image.Behaviors>
                        <behaviors:MultiTouchBehavior IsScaleEnabled="True" IsTranslateEnabled="False" />
                    </Image.Behaviors>
                </Image>
範例參考專案
https://github.com/vulcanlee/xamarin-forms-develop-notes-example/tree/master/XFImgZoom

2016/11/28

更新 Visual Studio Emulator for Android

當 Visual Studio Emulator for Android 有新的 VM 影像檔案推出的話,要怎麼取得呢?
此時,在Visual Studio,點選功能表 工具 > Visual Studio Emulator for Android ,此時,會看到如下圖的 Visual Studio Emulator for Android 對話窗出現,你可以點選 Download 連結,就可以更新囉。
enter image description here

在巢狀虛擬化的虛擬機器中執行 Hyper-V

今天,接到任務,需要使用這項功能
在巢狀虛擬化的虛擬機器中執行 Hyper-V
想說,Windows 10 已經升級到最新版本了,而且,現在的VM中,也有個安裝好的 Win10 VM,所以,參考這篇文章,在巢狀虛擬化的虛擬機器中執行 Hyper-V,下達了這個指令
Set-VMProcessor -VMName “Win10 VS2015” -ExposeVirtualizationExtensions $true
結果,卻得到了底下錯誤訊息
Set-VMProcessor : 無法修改裝置 'Processor'。
無法修改處理器設定。
'Win10 VS2015' 無法修改裝置 'Processor'。(虛擬機器識別碼 C84F0CD1-9CD6-490B-928F-B708DBD412B6)
升級虛擬機器版本前無法修改處理器設定 'ExposeVirtualizationExtensions'。(目前版本: 7.0。需要版本: 8.0)。
位於 線路:1 字元:1
+ Set-VMProcessor -VMName "Win10 VS2015" -ExposeVirtualizationExtension ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Set-VMProcessor],VirtualizationException
    + FullyQualifiedErrorId : NotSupported,Microsoft.HyperV.PowerShell.Commands.SetVMProcessor
根據訊息指示,將本機的 Hyper-V VM 升級到 8.0 版本,並且再度重新執行 PowerShell 指令。
結果是,完美、成功。

2016/11/27

Xamarin.Forms 導航機制與Prism框架的運作

當您使用 Prism 框架來開發 Xamarin.Forms 專案的時候,對於在不同的情境之下,例如:ContentPage, 導航頁面 NavigationPage,導航抽屜 MasterDetailPage這三中頁面下,要開始進行頁面導航 Navigation 操作的時候,各種不同的執行結果,你是否已經都已經可以充分了解與知道這些運作結果的呢?
請嘗試執行這個專案,看看不同按鈕的執行結果,你是否可以解釋與說明這些現象呢?
https://github.com/vulcanlee/XF-Course/tree/master/XFNaviService

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這種原生程式庫檔案内)

2016/11/25

VS2017 RC 的 Xamarin.Foms 專案錯誤問題 Could not load assembly Xamarin.Android.Support.v7.RecyclerView

使用VS2017RC 建立好 Xamarin.Forms的專案了。
此時,接下來就是要編譯 Android 專案,可是,重建 Android 專案,卻是失敗的,得到底下的訊息:
所以,按照指示,雙擊這個錯誤訊息,進行安裝這些 Android SDK 內容到 C:\Users\%UserName%\AppData\Local\Xamarin 目錄下
Severity    Code    Description Project File    Line    Suppression State
Error       Project 'App2.Droid' requires the following components installed on your machine: 
Xamarin.Android.Support.v4
JavaLibraryReference: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/support-v4/23.4.0/support-v4-23.4.0.aar-23.4.0.0
JavaLibraryReference: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/support-v4/23.4.0/support-v4-23.4.0.aar-23.4.0.0
AndroidResources: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/support-v4/23.4.0/support-v4-23.4.0.aar-23.4.0.0
Xamarin.Android.Support.Design
JavaLibraryReference: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/design/23.4.0/design-23.4.0.aar-23.4.0.0
AndroidResources: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/design/23.4.0/design-23.4.0.aar-23.4.0.0
Xamarin.Android.Support.v7.AppCompat
JavaLibraryReference: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/appcompat-v7/23.4.0/appcompat-v7-23.4.0.aar-23.4.0.0
AndroidResources: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/appcompat-v7/23.4.0/appcompat-v7-23.4.0.aar-23.4.0.0
Xamarin.Android.Support.v7.CardView
JavaLibraryReference: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/cardview-v7/23.4.0/cardview-v7-23.4.0.aar-23.4.0.0
AndroidResources: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/cardview-v7/23.4.0/cardview-v7-23.4.0.aar-23.4.0.0
Xamarin.Android.Support.v7.MediaRouter
JavaLibraryReference: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/mediarouter-v7/23.4.0/mediarouter-v7-23.4.0.aar-23.4.0.0
JavaLibraryReference: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/mediarouter-v7/23.4.0/mediarouter-v7-23.4.0.aar-23.4.0.0
AndroidResources: https://dl-ssl.google.com/android/repository/android_m2repository_r32.zip-m2repository/com/android/support/mediarouter-v7/23.4.0/mediarouter-v7-23.4.0.aar-23.4.0.0


Please double-click here to install it.         0   
再度 重建 Android 專案,卻是失敗的,得到底下的訊息:
Severity    Code    Description Project File    Line    Suppression State
Error       Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Xamarin.Android.Support.v7.RecyclerView, Version=1.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
File name: 'Xamarin.Android.Support.v7.RecyclerView.dll'
   at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters)
   at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(DirectoryAssemblyResolver resolver, ICollection`1 assemblies, AssemblyDefinition assembly, Boolean topLevel)
   at Xamarin.Android.Tasks.ResolveAssemblies.Execute(DirectoryAssemblyResolver resolver)   App3.Droid
看到這樣的訊息,當然是要把 Xamarin.Android.Support.v7.RecyclerView 這個組件從 NuGet 中安裝起來,所以,從 NuGet 中搜尋到這個套件,準備安裝的時候,又遇到底下錯誤訊息。
Severity    Code    Description Project File    Line    Suppression State
Error       Unable to resolve dependencies. 'Xamarin.Android.Support.v7.RecyclerView 23.4.0.1' is not compatible with 'Xamarin.Android.Support.Design 24.2.1 constraint: Xamarin.Android.Support.v7.RecyclerView (= 24.2.1)'.           0   
根據這個訊息,似乎是 ‘Xamarin.Android.Support.v7.RecyclerView 23.4.0.1’ 這個套件,不相容於 ‘Xamarin.Android.Support.Design 24.2.1’ 這個套件的限制,當然就要裝 ‘Xamarin.Android.Support.v7.RecyclerView 24.2.1’ 套件呀;結果是得到底下的錯誤,看樣子,好像與前面的錯誤訊息都是一樣。
Severity    Code    Description Project File    Line    Suppression State
Error       Unable to resolve dependencies. 'Xamarin.Android.Support.v7.RecyclerView 24.2.1' is not compatible with 'Xamarin.Android.Support.Design 24.2.1 constraint: Xamarin.Android.Support.v7.RecyclerView (= 24.2.1)'.         0   
回來檢查這個 Android 原生專案內的 ‘Xamarin.Android.Support.Design’ 套件,發現到此時安裝的是 23.4.0.1,這倒有點讓人混亂了。
enter image description here
好吧,那就試著升級 ‘Xamarin.Android.Support.Design’ 套件到 24.2.1 版本好了,可是,卻得到底下錯誤訊息。
Severity    Code    Description Project File    Line    Suppression State
Error       Unable to resolve dependencies. 'Xamarin.Android.Support.Design 24.2.1' is not compatible with 'Xamarin.Forms 2.3.3.168 constraint: Xamarin.Android.Support.Design (= 23.3.0)'.         0   
看樣子,又得把 ‘Xamarin.Forms’ 套件升級到 2.3.3.168,不過,當要升級的時候,又得到底下錯誤訊息:
Severity    Code    Description Project File    Line    Suppression State
Error       Unable to resolve dependencies. 'Xamarin.Android.Support.Compat 24.2.1' is not compatible with 'Xamarin.Android.Support.Design 24.2.1 constraint: Xamarin.Android.Support.Compat (= 24.2.1)'.           0   
恩恩,情況不妙,看樣子,這個 Xamarin.Forms 的專案,透過 Visual Studio 2017 RC 所建立起來的專案,有問題。
二話不囉說,安裝 Prism Template Pack 擴充套件,產生一個 Prism 的 Xamarin.Forms 的專案,完美,可以正常編譯。
enter image description here

VS2017 RC 建立的 Xamarin.Foms 專案使用的是 PCL or .NET Standard

其實,這個問題是我很關心的問題,當我第一次使用 VS2017RC 建立起 Xamarin.Forms的專案之後,我就想要知道這個問題,究竟微軟對於 Xamarin.Forms的 Share 專案,是要使用 PCL or .NET Standard的架構。
結果,在 VS2017RC內,建立起來的共用專案,還是使用 PCL Profile259的架構。
enter image description here