標籤:修改 guid 不同 blank xamarin java 檔案 不用 path
在 xamarin.android 繫結項目中,綁定 百度地圖的LBS地圖SDK,參考 https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-a-jar/ 設定好後,編譯, 然後提示錯誤,其中一個錯誤 是
意思就是說轉換 出來的CS 代碼中,有重複的 類型。 理論上來說,轉換的 CS 代碼 是不應該出現重複代碼的,有重複,意味這 jar有重複代碼。
然後查看 百度地圖的SDK說明 ,
發現 對應的這裡有 “不同參數的重載方法” ,所以,猜測 在轉換過程中,是無法識別這種具備相同方法名的,導致一對一轉出來後,在 CS 中有重複類型代碼。
不過,xamarin 提供了 Metadata.xml 檔案用於重寫指定的方法名名稱。
尋找 百度的SDK (或者反便宜jar檔案),上面這2個方法是位於 OnMapStatusChangeListener 介面下。
反編譯:
定位到這個錯誤碼檔案,然後 尋找名稱的 代碼,有個介面 IOnMapStatusChangeListener ,下面 有 對應的上面 介面
其實轉換出來的代碼,在介面這裡,是沒有錯的, 但是 IOnMapStatusChangeListener 介面實現的代碼中, 每個介面 都有一個 對於的 EventHandler ,導致出現2個 OnMapStatusChangeStartHandler 才會在編譯的時候 發生錯誤!
既然問題找到了,那麼解決方案 是?
目前找到一個方法 ,就是把 名稱修改一下,
在 Metadata.xml 檔案 中, path 是指 要修改的名稱 的路徑, 在轉換出來的的 cs 檔案中, 每個名稱對應的路徑都標註在 上面的注釋中,實在是很方便,不用自己去找!
在這裡,我要修改 第二個 OnMapStatusChangeStart ,即有2個參數的,修改名稱為 OnMapStatusChangeStart2
<attr path="/api/package[@name=‘com.baidu.mapapi.map‘]/interface[@name=‘BaiduMap.OnMapStatusChangeListener‘]/method[@name=‘onMapStatusChangeStart‘ and count(parameter)=2 and parameter[1][@type=‘com.baidu.mapapi.map.MapStatus‘] and parameter[2][@type=‘int‘]]" name="managedName">OnMapStatusChangeStart2</attr>
再次執行編譯,就會編譯通過了。
連結: https://blog.wuliping.cn/post/note-xamarin-android-binding-baidu-lbs-sdk
xamarin.android 綁定百度地圖SDK遇到的問題