Xamarin.Android 綁定友盟社會化分享組件


Xamarin.Android 綁定友盟社會化分享組件

最近在開發博客園Android App的時候需要用到友盟社會化分享組件,在github上搜了一下都沒有找到最新版本綁定好的項目,就自己動手來綁定一個最新版本的友盟社會化分享組件(文章發布時的最新版為v6.4.3)。

下載友盟Android版SDK

友盟社會化分享組件 v6.4.3
本文只使用到微信,QQ,新浪微博,故只下載了精簡版

創建綁定項目

創建步驟如圖所示:


添加友盟SDK的jar包到綁定項目的Jars文件夾下

添加下載的友盟SDK項目中main,platforms,shareboard,shareview文件夾中的jar包到綁定項目的Jars文件夾下,如圖示:


修改所有jar包的屬性EmbeddedJar,如圖示:

生成項目

全部修改好之后,生成項目,出現一大堆錯誤,先別急,看一下都有些什么錯誤。

好了,雙擊第一個錯誤,打開后發現UMImageMark類竟然繼承的是自己,這應該就是錯誤的源頭了。

然后我們把UMImageMark繼承的類改為Java.Lang.Object試試,ok,錯誤消失了。

但是這樣改是沒有用的,因為這已經是生成好的代碼了,要改就只能在源頭上更改了,怎么辦呢? 打開Transforms文件夾下的Metadata.xml文件,在這里編寫修改的代碼就行了。

但是怎么修改UMImageMark類的繼承類呢?按下面的方式添加一行代碼就搞定了。

<attr path="/api/package[@name='com.umeng.social.tool']/class[@name='UMImageMark']" name="extends">Java.Lang.Object</attr>

然后再生成一下,看有沒有效果。

上面的錯誤沒有了,說明成功了。可是還是有好多錯誤。接下來看下一個錯誤。雙擊打開第一個錯誤,發現CancelEventArgs類是一個分布類再兩個文件中存在,google一下發現是因為IUMShareListener接口和IUMAuthListener接口存在相同的方法,所以綁定的時候會生成相同的類。好了,知道了原因就好辦了,只要把其中一個接口中的方法名字改一下就好了,代碼如下:

   <attr path="/api/package[@name='com.umeng.socialize']/interface[@name='UMAuthListener']/method[@name='onComplete']" name="managedName">OnAuthComplete</attr>
   <attr path="/api/package[@name='com.umeng.socialize']/interface[@name='UMAuthListener']/method[@name='onError']" name="managedName">OnAuthError</attr>
  <attr path="/api/package[@name='com.umeng.socialize']/interface[@name='UMAuthListener']/method[@name='onStart']" name="managedName">OnAuthStart</attr>

重新生成一下。

Good,成功了,只剩下3個錯誤了。
下一個錯誤一看就知道是因為修飾符的原因造成的,把繼承類的這個方法修飾符protected改成public就可以了,代碼:

<attr path="/api/package[@name='com.umeng.socialize.sina.params']/class[@name='BrowserRequestParamBase']/method[@name='onCreateRequestParamBundle' and count(parameter)=1 and parameter[1][@type='android.os.Bundle']]" name="visibility">public</attr>

重新生成一下。

好了,還有2個錯誤。錯誤提示說“UMShareAPI.InitThread”不實現繼承的抽象成員“QueuedWork.UMAsyncTask.DoInBackground()”,打開發現已經有了DoInBackground方法了,但是沒有override關鍵字修飾。

怎么辦呢,只能新建一個UMShareAPI分布類來重寫這個方法了。在Additions文件夾下新建一個UMShareAPI類,注意修改命名空間為Com.Umeng.Socialize,然后重寫DoInBackground方法。由於原來已經有了一個叫DoInBackground的方法,所以需要把原來的方法名修改成DoInBackgrounds就搞定了,代碼:

namespace Com.Umeng.Socialize
{
    public partial class UMShareAPI
    {
        public partial class InitThread : global::Com.Umeng.Socialize.Common.QueuedWork.UMAsyncTask
        {
            protected override Java.Lang.Object DoInBackground()
            {
                return DoInBackgrounds();
            }
        }
    }
}
  <attr path="/api/package[@name='com.umeng.socialize']/class[@name='UMShareAPI.InitThread']/method[@name='doInBackground' and count(parameter)=0]"  name="name">DoInBackgrounds</attr>

保存后重新生成一下,搞定了。

最后一個錯誤是類名和屬性名沖突了,修改一下類名就行了。

<attr path="/api/package[@name='com.umeng.socialize.utils']/class[@name='Log']/field[@name='LOG']" name="name">Logs</attr>

重新生成。搞定。大功告成。

========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========

最后

下載地址

Github

這個項目中是我在使用Xamarin.Android的時候自己用到的綁定庫,包含了友盟統計,友盟社會化分享,訊飛版本自動更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM