一直想找一个大型的Android开源项目进行分析,由于自身和导师课程需要选择了wordpress的Android客户端源码进行学习和解读。源码github官方下载地址:开源项目地址。分析源码的最佳手段当然是动手实践,能够修改源码并看到实际的显示效果,成果的展示是自己前进的最好动力。
配置Android工程项目
源码的编译平台基于Android studio,所以还执着于eclipse开发的朋友需要改变一下了,工程导入的时候确保你的网络畅通,如果能用VPN是更好的了,gradle下载的依赖包会很慢,可能需要等好一会。工程配置完成后,直接编译生成apk文件,能用手机开发就能直接看到编译效果了。
搭建wordpress站点服务器
wordpress apk程序功能分为两大模块:1.登录官网的博客站点;2.登录自定义的博客站点。为了分析需要我们需要搭建自己的wordprss服务器站点,wordpress服务器源码官方地址:中文简体版。wordpress服务器源码运行环境需要lamp或者wamp测试环境,假定服务器环境你已经配置完成,只需要将wordpress源码放到Apache服务器的根目录下即可完成自定义wordpress站点的配置,具体配置步骤可参考网络。有一点需要指出:配置wordpress的时候,指定域名为具体的IP地址不要用localhost代替,不然会出现很大的问题。
Android源码目录架构
借用github一张图片展示Android源码目录主体架构:
客户端的核心代码在wordpress/src/main/java/org下面,里面包含两个包:wordpress.android和xmlrpc.android。从名称上面我们就可以看出它们的区别,wordpress.android主要负责客户端的UI设计和显示,程序的逻辑处理。xmlrpc.android负责xmlrpc通信协议的接口定义,最主要的方法在XMLRPCClient类中定义:Object call(String method, Object[] params) ,客户端向服务器发送数据请求都是通过call方法来实现的,而服务器提供了一系列的API(本地方法)处理客户端的请求,这个过程是整个项目的核心处理逻辑。
Client功能设计
用户登陆认证
1.官网站点wordpress.com
—用户名和口令。
—Oauth2.0认证。
—access token保持长久的连接。
2.开发人员搭建的wordpress服务器
—用户名、口令和站点IP。
—认证方式与官网用户相同。
从程序主界面上分析两种认证方式:用户认证站点不同。
第一次认证后获得access token进入Blog主界面,每次Request发起请求需要加入access token,获得服务器授权。
blog主界面
1.自定义的左侧滑出菜单(SlidingMenu、MenuDrawer)
2.下拉菜单Item加载
每个Item对应一个Blog ID,点击事件触发后从本地数据库加载Blog Content。
网络正确连接时,从Server端更新Blog Content并存储到本地数据库中。
3.下拉菜单Item条目内容
—博文:用户创建的博客列表。
—媒体:用户上传的视频和图片资源。
—站点:用户博客注册的网上访问站点。
blog基本操作
Client网络通信过程
volley
—2013年Google I/O大会上推出的Android平台上的网络通信框架——Volley。
—volley适合去进行数据量不大,但通信频繁的网络操作。
—针对资源类型:JSON数据对象和图片加载两种情况。
—使用方法:
git clone https://android.googlesource.com/platform/frameworks/volley
下载源码包,eclipse中编译成jar包,导入工程后即可使用。
注意:android:minSdkVersion设置为8以上。
JSON和ImageView获取:网络请求request(JsonObjectRequest和ImageRequest)返回对应的response。
xmlrpc
—定义:使用http协议作为传输协议的rpc机制,使用xml文本的方式传输命令和数据。RPC通信框架必然包含两个部分:rpc client和rpc server。
—xmlrpc client
向rpc server发送调用方法请求,并接收方法的返回数据。
Object call(String method, Object[] params)方法,返回结果是服务器端数据经过序列化后的Object对象。
—xmlrpc server(class-wp-xmlrpc-server.php)
响应rpc client的请求,执行方法,并回送方法执行结果。
提供的API类型:WordPress API、Blogger API、MetaWeblog API提供了一系列的method给Client调用,典型的有wp.uploadFile、wp.getUsersBlogs等方法。
数据解析与显示
xml和JSON
—XML解析
DOM:将整个xml看成是一个树状的结构,解析时将整个xml文件加载到内存当中,可以通过某个节点访问到其兄弟或者是父类、子类节点。
SAX和PULL:都是基于事件驱动的xml解析器,在解析xml时并不会加载整个的xml文档,占用内存较少,Android开发中建议使用sax或者pull来解析xml文档。
Wordpress使用PULL方式:采用Android自带的org.xmlpull.v1 jar包来解析XML文件。
—JSON解析
3.0版本前的SDK需要导入gson的jar包。
json-lib。
ListView和Adapter
—界面数据加载与刷新
Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。如下图直观的表达了Data、Adapter、View三者的关系。
Android提供了BaseAdapter、ArrayAdapter、SimpleAdapter等适配器接口,通过绑定后端数据和前端的ListView来加载数据。
notifyDataSetChanged方法刷新ListView,可自定义刷新效果。
Client和Server通信
本篇文章主要从整体框架上分析了WordPress Android客户端的主体功能和相关技术实现,下面我将会开几篇blog分析技术源码的相关实现,有兴趣的朋友可以看后面的内容。