在使用新浪微博SDK进行开发的时候,发现新浪提供的SDK和腾讯的SDK比起来,明显后者好用很多。我在使用新浪微博SDK的过程中,遇到很多蛋疼的问题,搞得我超级郁闷。比如,使用它的SDK先要弄明白何为jar包模式,何为library模式,还要知道这两者的区别,因为他的官方API文档里说,这两者不能混用。既然不能混用,是不是说挑一个用就行了,但是绝非这么简单,从它的文档中可以看到,你还是需要在某种程度上混用这两种外部类。
按照正常人的思考习惯,既然你提供了SDK,也提供了jar包的。很显然大家会认为SDK是导入到eclipse中做为一个工程来查看的,这样开发者可以方便地查看源码,方便地快速了解SDK的接口和方法。对于提供的jar包,大家理所当然会认为这是用来放到libs文件夹下,然后把路径添加到自己开发的项目中的。而且,添加jar包到libs文件夹下的方式无疑是最佳实践。因为这样就可以在协同开发时方便地共享源代码。要是使用library模式的话,共享代码的时候,不仅要共享自己开发的项目,还要共享被标注为isLibrary的项目,很多项目来回Export和Import,实在很麻烦,也常出错。
但是奇葩的新浪SDK又一次颠覆了程序员的认知。它不认为这两者应该分开,其实他们把jar包与library模式这两种模式给杂糅到了一起,这就是一切烦恼的根源。
更荒唐的是,作为对外提供API接口的平台,竟然在官方文档中用大篇幅来告诉开发者如何导出jar包,如何安装eclipse插件。当然里面说的如何导出jar包,如何安装eclipse插件都是和使用SDK相关的,但是最为一个开放平台,难道就没有能力把这个复杂度消除吗?你提供SDK不就是为了降低技术门槛,让开发者抽身去做更有价值的事情嘛,这倒好,不用研究授权认证了,反倒需要浪费很多时间去研究如何导出jar包,如何安装eclipse插件了。能不能有点服务意识啊!
我用新浪微博SDK时经常出问题,很多问题都是因为未按照官方文档中要求的步骤导致的(但是官方文档的步骤很另类),比如“找不到类所定义的类”异常:
- 01-28 15:56:47.970: E/AndroidRuntime(20190): java.lang.NoClassDefFoundError: com.weibo.android.R$style
- 01-28 15:56:47.970: E/AndroidRuntime(20190): at com.weibo.net.WeiboDialog.<init>(WeiboDialog.java:54)
- 01-28 15:56:47.970: E/AndroidRuntime(20190): at com.weibo.net.Weibo.dialog(Weibo.java:353)
- 01-28 15:56:47.970: E/AndroidRuntime(20190): at com.weibo.net.Weibo.startDialogAuth(Weibo.java:260)
- 01-28 15:56:47.970: E/AndroidRuntime(20190): at com.weibo.net.Weibo.authorize(Weibo.java:329)
- 01-28 15:56:47.970: E/AndroidRuntime(20190): at com.weibo.net.Weibo.authorize(Weibo.java:308)
- 01-28 15:56:47.970: E/AndroidRuntime(20190): at com.logan.weibo.ui.AuthorizeActivity.onCreate(AuthorizeActivity.java:66)
下面的内容摘自新浪微博android平台SDK 文档
时间 | 文档版本 | 修订人 | 备注 |
2012/7/20 | 2.0.0 | 罗棚 | 初稿 |
2012/8/02 | 2.0.0 | 张晓伟 |
|
|
|
|
|
概述
微博Android平台SDK为第三方微博应用提供了文档易用的微博API调用服务,使第三方客户端无需了解复杂的验证,API调用过程。并可以实现分享到微博的功能,可以分享文字,或者多媒体信息到内置的分享页面,并发送到微博。
主要类说明:
1. Weibo: 微博API 接口类,对外提供weiboapi的调用,包括登录,API调用,微博分享等功能。
2. Oauth2AccessToken:封装了“access_token”,“expires_in”,"refresh_token",并提供了
他们的管理功能
3. Utility:工具类,提供了url 的encode,decode方法。
4. AsyncWeiboRunner:微博api异步执行类,封装了回调接口,通过创建线程来调用Weibo中的接口方法。
5. HttpManager: 负责与服务器进行通讯的类,封装了GET、POST请求方式,并对外提供图片上传等功能
6. WeiboAPI: 该类及其子类封装了新浪微博对外提供的api接口方法。
7. WeiboException:微博异常封装类,封装了微博的各个异常。
8. SsoHandler:单点登录 认证类,对外提供了sso登录认证的方法。
SDK使用说明
1. 使用weibo.sdk.android(不包含sso功能)
1.1将SDK的工程项目导入到eclipse中。
在eclipse中选择File->Import->General->Existing Projects into Workspace。注意:SDK工程的编码格式为UTF-8。如图所示:
图表 2
1.2在需要集成本SDK的工程项目中添加Library。
右键 -> Properties -> Android。设置Library属性,如图所示:
图表 3
1.3 Manifest文件中必须包含以下permission:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
1.4 如果想在自建工程里直接使用sdk提供的jar包,可以在eclipse的File->Export->Java->JAR file里打出jar文件,假设名称为oauth20.jar,如下图所示:注意:jar包模式和library模式不能混用,而且这种方式导出来的jar包与library模式下自动生成的jar包是不同的,后者无法将assets目录打进jar文件
图表 4
最后生成的jar的内部结构如下图所示:
图表 5
2. 使用weibo.sdk.android.api
Weibo.sdk.android.api是在weibo.sdk.android的基础上扩展而来,里面提供了一些对新浪微博openapi的封装接口,供用户使用。
2.1因为api sdk是在weibo.sdk.android的基础上开发的,所以使用api sdk之前,需要先导入weibo.sdk.android sdk,步骤详见上节介绍。
2.2 按照上节的步骤,导入api sdk,同样需要将此sdk设置为library
2.3 在Eclipse中,进入新建工程的Properties->Android中,按照下图所示添加library,
2.4如果想在自建工程里直接使用sdk提供的jar包,可以在eclipse的File->Export->Java->JAR file里打出jar文件,假设名称为oauth20-api.jar,步骤同1.4。
3. 使用weibo.sdk.android.sso
3.1 因为sso sdk是在weibo.sdk.android的基础上开发的,所以使用ssosdk之前,需要先导入weibo.sdk.android sdk(如果要使用已经封装好的api接口,也可以导入weibo.sdk.android.api),步骤详见上节介绍。
3.2 按照上节的步骤,导入sso sdk,同样需要将此sdk设置为library
3.3 在Eclipse中,进入新建工程的Properties->Android中,按照下图所示添加library,
图表 6
添加完成后,查看工程的build path,保证如下图所示,工程里已经分别引入了weibo.sdk.android.sso.jar和weibo.sdk.android.jar:
图表 7
3.4 如果想在自建工程里直接使用sdk提供的jar包,也可以按照下面的步骤来生成最终需要的jar文件,注意:jar包模式和library模式不能混用
1) 安装net.sf.fjep.fatjar_0.0.31.jar:
a. 将上面的jar包放入eclipse->plugins目录,并重启eclipse
b. 在工程中点击右键,出现下面的选项 Build Fat jar,说明此插件安装成功
c. 如果没有出现,将 $eclipse_Home\configuration\org.eclipse.update\platform.xml
删除,然后再重启eclipse,执行b步骤检查是否安装成功
d. 如果还未不成功,可以在线安装此插件,插件的地址是:http://kurucz-grafika.de/fatjar,执行b步骤检查是否安装成功
e. 一般经过上面几个步骤,都可以正常安装fatjar,如果还未成功,那只好使用最后一招了,换个其他版本eclipse吧,笔者使用3.7.2,没有任何问题
图表 8
2) 点击Build fat jar,按照向导一步步操作,在添加资源时,应保证将上节(1.4节)生成的oauth20.jar勾选进来,如下图所示,最终生成一个jar,此jar文件内将包含oauth20.jar中的所有内容,文件内部结构如 图表5(如果想使用weibo.sdk.android.api提供的接口,在生成jar文件时,也需要将2.4节中生成的oauth20-api.jar勾选进来)
图表 9
将最终生的jar文件作为lib添加入自建工程中,并且在图标4所示界面中将引入的library 删除。
完成之后就可以正常使用了。