在 xamarin.android 綁定項目中,綁定 百度地圖的LBS地圖SDK,參考 https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-a-jar/ 設置好後,編譯 ...
在 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