2016年12月31日 星期六

避免在開發 Xamarin.Forms 時第一次編譯 Android 平台的 App 遇上缺少 Xamarin.Android.Support.XXXX 錯誤的問題…

 

由於最近越來越多人嘗試著使用 Xamarin.Forms 來開發 App,但常會在第一次編譯 Android 平台上的 App 時遇上 "Xamarin.Android.Support.XXXX" 之類的錯誤訊息,接著就卡關了。

而這個問題在2016年五月時小弟就曾經在昕力大學發表類似的解決文章: "在Xamarin.Android or Xamarin.Forms的開發過程遭遇Please install package Xamarin.Android.Support.XXXX的編譯錯誤訊息,該如何解決呢?"。在該篇文章當中有詳細討論此問題的成因與來由,所以想要詳細了解的人,可以再去閱讀此文章。

該篇文章是解說遇到問題時該怎麼解決,而且當時也只有敘述 Windows上面的解決方式,所以本篇文章是直接教導怎樣讓無論是在 Windows 或 Mac上,要使用 Xamarin.Forms 的初心者,在編譯 Android 平台上的 App 能夠避免這樣的問題發生。

 

前情提要

發生這樣的問題,很大一部份原因是因為在沒有可靠穩定的網路時(如: 易斷線、頻寬不夠、防火牆遮蔽…等),造成第一次使用 Xamarin.Forms 的編譯 Android 平台的 App,或是更新新版 Xamarin.Forms 的 Nuget Package 時,會要去下載對應 Nuget Package 的 Android SDK 套件不完全,就會發生此問題。

在這邊詳細說明一下,由於目前 Xamarin.Forms 當中的 Android 平台使用的 Nuget Package 需要對應到 Android SDK 當中的 "android_m2repository_r<版號>.zip" 套件,來讓完成編譯的動作。

而在第一次編譯時,會去下載該套件回來並進行解壓縮,所以使用 Xamarin.Forms 第一次編譯 Android 平台的 App 會特別的漫長,而且如果網路不穩時就會失敗。

為了解決這樣的問題,我們可以預先做好下載的這個動作,並且按照 Xamarin.Forms 處理此套件的做法先處理好,就能避免這樣的問題發生。

 

前置作業

以目前的時間點(2016年12月),Xamarin.Forms 的 Nuget Package 會對應到的是 "android_m2repository_r29.zip",所以請先透過下列網址下載:

android_m2repository_r29.zip:
https://dl-ssl.google.com/android/repository/android_m2repository_r29.zip

並將下載回來的zip檔,改檔名為 "2A3A8A6D6826EF6CC653030E7D695C41.zip"

 

Windows 中的處理方式

透過檔案總管的網址列直接鍵入 "c:\Users\<Your Account>\AppData\Local",並在Local 資料夾底下找尋 "Xamarin" 資料夾,如果沒有就自己手動建立一個 "Xamarin" 資料夾,如果有也建議直接刪除已存在的 "Xamarin" 資料夾再重新建一個,接著再進到這個 "Xamarin" 資料夾。

PS 由於 AppData 在 Windows 裡是個系統隱藏資料夾,無法直接在檔案總管當中瀏覽到,請直接用檔案總管的網址列直接鍵入位置。


在這個空的 Xamarin 資料夾繼續建立一個叫做 "zips" 的資料夾,並且將前述的前置作業中所下載變更命名好的 "2A3A8A6D6826EF6CC653030E7D695C41.zip" ,複製到這個 zips 資料夾當中,如下圖:

1

 


接著在 Visual Studio 建立一個 Xamarin.Forms 的專案,而當專案本身所使用的 Xamarin.Forms 的 Nuget Package升級到2.2.0.31時,在 Android 平台編譯時會根據依賴的 MonoAndroid Nuget Package 版本而用到 android_m2repository_r29.zip 的部分。當然會更建議是直接將 Xamarin.Forms 的 Nuget Package 升級到 2.3.3.xxx 以後的版本(而在目前這個時間點的最新穩定版是 2.3.3.175)。

 

完成後就可以在 Visual Studio 中將 Xamarin.Forms 的專案建置or重建,接著再將 Android 平台的專案建置or重建。而在這個時候重建的時間會相當久,理由是編譯的過程會先去將剛剛的那個 "2A3A8A6D6826EF6CC653030E7D695C41.zip" 作解壓到 zips 這個資料夾的上層資料夾 Xamarin 當中,並且編排 Nuget Package 所需對應 Android SDK 套件,所以會看到在該 Xamarin 資料夾當中會形成如下圖的呈現結果:

2

PS 只有第一次使用時會需要這樣,之後的 Xamarin.Forms 專案在編譯 Android 的平台 App時,就會直接用已經對應好的相關套件內容,所以編譯的速度就會加快了。

 

靜待一段時間後,就會看到 Visual Studio 告知編譯成功的訊息,如下圖:

3

 

 

在 Mac 中的處理方式

首先打開Mac的終端機,輸入 "mkdir -p .local/share/Xamarin/zips"的指令,如下圖:

4

 

執行完成後會在 "/Users/<Your Account>" 底下建立一個叫做".local"的資料夾然後一直到叫做 "zips" 資料夾,如下圖結果:

5


可以透過Finder的 "前往" –>  "前往資料夾" ,然後輸入 "/Users/<Your Account>/.local" 開啟該資料夾的瀏覽。

PS 注意local的前面要有一個 "."。

 

再來就是將前述的前置作業中所下載變更好命名的 "2A3A8A6D6826EF6CC653030E7D695C41.zip" 檔案,複製到這個zips資料夾當中,如下圖:

6

 
接著開啟 Xamarin Studio 當中,建立一個 Xamarin.Forms 的專案,而當專案本身的 Xamarin.Forms 的 Nuget Package 升級到 2.2.0.31 時,在 Android 平台編譯時會根據依賴的 MonoAndroid Nuget Package 版本而用到 android_m2repository_r29.zip 的部分。當然會更建議是直接將 Xamarin.Forms 的 Nuget Package 升級到 2.3.3.xxx 以後的版本(而在目前這個時間點的最新穩定版是 2.3.3.175)。

 

完成後就可以在 Xamarin Studio 當中將 Xamarin.Forms 的專案建置or重建,接著再將 Android 平台的專案建置or重建。而在這個時候重建的時間會相當久,理由是編譯的過程會先去將剛剛的那個  "2A3A8A6D6826EF6CC653030E7D695C41.zip" 作解壓到 zips 這個資料夾的上層資料夾 Xamarin 當中,並且編排 Nuget Package 所需對應 Android SDK 套件,所以會看到在該 Xamarin 資料夾當中會形成,如下圖的呈現結果:
7

PS 只有第一次使用時會需要這樣,之後的 Xamarin.Forms 專案在編譯 Android 的平台 App時,就會直接用已經對應好的相關套件內容,所以編譯的速度就會加快了。

 

靜待一段時間後,就會看到 Xamarin Studio 告知編譯成功的訊息。

8

 

本篇文章同步發表於 昕力大學 ,網址是:
https://tpu.thinkpower.com.tw/tpu/File/html/201612/20161230235038_f.html

歡迎前往 昕力大學 觀看更多有關 Xamarin 的文章。

 

參考資料:

在 Xamarin.Android or Xamarin.Forms的開發過程遭遇Please install package Xamarin.Android.Support.XXXX的編譯錯誤訊息,該如何解決呢?:
https://tpu.thinkpower.com.tw/tpu/File/html/201605/20160531122859_f.html

Linux 檔案與目錄管理:
http://linux.vbird.org/linux_basic/0220filemanager.php

沒有留言:

張貼留言