Xamarin Android Bindings Java

在Xamarin中引用原生的AndroidClassLibrary的Jar檔後,遭遇編譯上的錯誤與解決…II

James Tsai 2015/11/30 06:56:52
666

主題

Xamarin中引用原生的AndroidClassLibraryJar後,遭遇編譯上的錯誤與解決…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後,建立一個AndroidBinding 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

http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding-a-java-library/troubleshooting-bindings/

Java Bindings Metadata

http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding-a-java-library/java-bindings-metadata/

Consuming Java Libraries from C# For Xamarin Development - Part 2

http://www.itexico.com/blog/bid/98568/Xamarin-Mobile-Development-Consuming-Java-Libraries-from-C-in-Xamarin-Android-Part-2

James Tsai