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 個 ==========
最后
下載地址
這個項目中是我在使用Xamarin.Android的時候自己用到的綁定庫,包含了友盟統計,友盟社會化分享,訊飛版本自動更新。