在Xamarin中引用原生的AndroidClassLibrary的Jar檔後,遭遇編譯上的錯誤與解決…II
主題: |
在Xamarin中引用原生的AndroidClassLibrary的Jar檔後,遭遇編譯上的錯誤與解決…II |
文章簡介: |
透過此篇文章的解說,你將能清楚的知道如何在使用Xamarin.Android時,引用原生的AndroidClassLibrary後所產生出來Jar檔後,遭遇編譯上的問題與解決的辦法。 |
作者: |
James Tsai |
版本/產出日期: |
V1.0/2015.11.29 |
1. 前言
• 常常會遇到有人在Xamarin.Android開發時,有需要將過去開發好的Android Class Library透過Binding的技巧引入到Xamarin.Android的專案來使用,但匯入後常常會發生無法正確編譯的問題,此篇文章繼續將幾個基本常見的狀況,做一個簡單的介紹與解決辦法。
• 在昕力大學之前的Xamarin與行動開發相關的這篇“在Xamarin中引用原生的AndroidClassLibrary的Jar檔後,遭遇編譯上的錯誤與解決…”的文章中,介紹在Android Class Library透過Binding的技巧引入到Xamarin.Android的專案來使用後,會發生問題的解決。而本篇是的延續該篇在繼續討論新的問題,若想觀看前篇的朋友,可點此連結 前往觀看。
2. 環境準備
• Windows 8/8.1/10
• Eclipse with ADT
• Visual Studio 2015
3. 本文
在Visual Studio當中編譯Bindings Library Project發生錯誤。
• 首先我們這次到網路上找來著名dji 給Android開發用的SDK。
• 在到dji所提供的GitHub下載。而我們這次的目標是dji-sdk.jar。把它下載下來吧!!
• 我們開啟Visual Studio後,建立一個Android的Binding Library的專案吧!!
• 接著在專案建立好後,在該專案當中加入剛剛的dji-sdk.jar檔。加入後記得把該dji-sdk.jar的建置動作,調整為EmbeddedJar,接著你就會看到錯誤清單當中跳出四個錯誤。(綠色框)
• 接著打開專案當中Transforms底下的Metadata.xml檔。
• 接著在該檔案當中加入以下修正描述。
• 增加好後如下圖所示
• 對專案重建後,Visual Studio 會告訴我們全部重建成功(左下角),可是錯誤訊息不知道為什麼還是會殘留著,可以將此專案關掉在重開,錯誤訊息就會消失了。
接著後面我們就來來分析一下原因吧…
該錯誤的成因與觀念討論
• 其實其中的前面的三個錯誤,我們用JD-GUI看一看該dji-sdk也就知道了
我們順著之前的錯誤訊息所告訴我們的在”com.trilead.ssh2.channel”這個package底下找不到IChannelWorkerThread這個Interface,所以我們在metadata這個檔當中所加入的描述就是幫它加上public的描述詞。
• 剩下的一個錯誤訊息,我們再用JD-GUI看一看該dji-sdk吧!!!
我們順著之前的錯誤訊息所告訴我們的在”com.trilead.ssh2.log”這個package底下的Logger的類別底下有相同的成員名稱(轉換後會出現成員名稱的命名大小寫的問題),所以我們就幫該成員名稱重新命名即可解決。
4. 參考來源
• Troubleshooting Bindings
• Java Bindings Metadata
• Consuming Java Libraries from C# For Xamarin Development - Part 2