在 Xamarin.Android 當中啟用 Multi-Dex 的編譯設定
主題: |
在 Xamarin.Android 當中啟用Multi-Dex 的編譯設定… |
文章簡介: |
在開發 Xamarin.Android 的時候,如果有了解 Android OS 的基本運作概念的話,應該會知道其實 Android App 的Java code是仰賴運作在 Dalvik VM上,而如果你的 App 不大也不用仰賴第三方的套件,通常沒什麼太大的問題,但這是不可能的吧…所以只要 App 開始變得比較複雜時,應該會遇上有名的 "Dex 64k method 的限制" 問題,那在Xamarin.Android 該怎麼處理呢? |
作者: |
James Tsai |
版本/產出日期: |
V1.0/2017.7.31 |
1. 前言
• 在Android 的App開發上,著名的”Dex 64k method的限制”問題經常困擾著 Android App的開發者們。當然,Xamarin.Android 開發的 Android App也同樣躲不過這個問題。但請記住,這不是 Xamarin.Android 才造成的問題,而是Android OS 先天上的設計限制造成的,請勿倒果為因。
2. 環境準備
• Visual Studio 2015/2017
• Visual Studio for Mac
3. 本文
前置準備
• 一個大而複雜的 Xamarin.Android 專案準備。
這個專案的準備請自行想辦法,當在Xamarin.Android 編譯時遇到如下圖的錯誤訊息時,就可能是遇上這樣的問題了。
在Xamarin.Android 專案當中啟用 Multi-Dex 編譯
• 如果 Xamarin.Android 專案編譯後,出現如前一節所提到的”java.exe 以返回碼X結束” 錯誤訊息。首先,請先檢查在 Xamarin.Android的編譯設定中, Java SDK 是不是正確的使用到1.8.XXX以後的版本。
在Visual Studio 當中,找到工具->選項。
在選項對話窗左邊的窗格選單當中找到 Xamarin->Android 設定。
確認 Java 開發套件的版本是否套用正確,如果不是1.8.XXX以後的版本,請到Oracle的Java官網上下載新版的Java SDK安裝。安裝完成後,請再回來到這個畫面,點選”變更”選到安裝好的新版Java SDK。
• 如果確定Java SDK的部分沒有問題,但重新建置Xamarin.Android 專案後,還是遇到相同的” java.exe 以返回碼X結束”錯誤訊息。那再來就該考慮是不是遇上Android的”Dex 64k method限制”問題了。
• 如果要解決這個問題,在原本的Android開發時要調整的設定還挺麻煩的,不過 Xamarin 已經幫你簡化到很簡單。有多簡單?只要打個勾就行。
• 在Visual Studio 的方案總管當中選到 Xamarin.Android 的專案檔,再點選”檢視”->”屬性頁”,或是在Xamarin.Android的專案檔上的右鍵選單,選到”屬性”。
• 在該屬性頁中,點選”Android選項”。
• 在這個”Android 選項”當中,我們可以看到有個”啟用Multi-Dex” 的選項,在這邊就將它打勾。
• 這邊有件設定的動作要注意,這個設定是跟著”組態”調整的,所以如果是在Debug下模式設定的,到了要發布App時會切到Release模式,也還要再設定勾選一次。
• 設定完成後,再次回到Xamarin.Android的專案重新建置編譯,應該就可以順利編譯成功了。
啟用 Multi-Dex 後的編譯錯誤
• 如果在啟用Multi-Dex 的設定後,編譯後發現如下圖的呈現的錯誤,那就要再請檢查Android SDK所在的檔案位置了。
• 在Visual Studio 當中,找到工具->選項。
在選項對話窗左邊的窗格選單當中找到 Xamarin->Android 設定。看到”Android SDK 位置”,如果這個位置的路徑中間有”空格”的存在,請將這整個Android SDK的資料夾,搬移到沒有”空格”的路徑下。
• 等Android SDK的資料夾搬移好後,再回到上述的畫面,點選”變更”套用新的路徑,就可以正常順利的編譯Xamarin.Android專案了。
4. 參考來源
• Part 1 - Preparing an Application for Release:
https://goo.gl/9cqix6
• "java.exe" exited with code 2.:
https://forums.xamarin.com/discussion/46765/java-exe-exited-with-code-2
• MultiDex in Xamarin:
https://przemekraciborski.eu/2016/09/30/multidex-in-xamarin/
• Multidex in Xamarin.Android:
http://www.jon-douglas.com/2016/09/05/xamarin-android-multidex/
• Configure Apps with Over 64K Methods:
https://developer.android.com/studio/build/multidex.html
• 預防 Android Dex 64k Method Size Limit:
https://ingramchen.io/blog/2014/09/prevention-of-android-dex-64k-method-size-limit.html