聊一聊Android的第三方开发组件

源地址:http://fanxu.me/post/2013-06-06-1

AndroidAnnotation

官方网站

Image Title

首先推荐AndroidAnnotation, 按官方网站的说法就是

Fast Android Development. Easy maintainance。

AndroidAnnotation的ViewByID,Preference,UI线程,后台线程,点击事件处理等特性, 可以让你少些非常多代码, 非常显著的提高android开发效率。
AndroidAnnotation利用的是java的annotation, 类似于预编译指令, 在编译时生成代码, 再进行编译。所以不管是用eclipse还是用idea都需要经过一些配置。配置的方法在官方文档都有介绍, 非常简单。文档地址

Android-Query

官方网站地址

Image Title

Android-Query(AQuery) 是用来处理网络请求和操作ui的组件。官方对这个组件的定位是:

Our goal is to make Android coding simpler, easier, and more fun!

AQuery 提供一种对ui的链式处理方式, 试图简化ui操作的代码。

public void renderContent(Content content, View view) {    
        AQuery aq = new AQuery(view);    
        aq.id(R.id.icon).image(R.drawable.icon).visible().clicked(this, "someMethod");  
        aq.id(R.id.name).text(content.getPname());
        aq.id(R.id.time).text(FormatUtility.relativeTime(System.currentTimeMillis(), content.getCreate())).visible();
        aq.id(R.id.desc).text(content.getDesc()).visible();                     
}

个人比较喜欢的不是这部分对ui的操作, 我一般用AndroidAnnoation直接处理ui操作, 那更简洁更接近Android原生处理的方式。
AQuery最优秀的是对网络请求的处理, 它支持异步网络请求, 网络请求缓存。

AQuery aq = new AQuery(view);
aq.id(R.id.image1).image("http://www.vikispot.com/z/images/vikispot/android-w.png");

以上代码自动加载指定链接的图片, 并在加载完毕后显示在相应的组件上。若是自己写代码加载图片, 那叫一个痛苦啊。

还有更牛逼的。

//load an image from network, but only cache with file

//this image is huge, avoid memory caching
boolean memCache = false;
boolean fileCache = true;

aq.id(R.id.image1).image("http://www.vikispot.com/z/images/vikispot/android-w.png", memCache, fileCache);

以上代码, 自动将图片缓存在文件里, 下次再加载图片就不用再发起网络请求了。

更况且, 这么牛逼的组件大小只有96.5KB。

Google Cloud Message, GCM

Image Title

许多人不敢用GCM,一个是担心网络被墙, 一个是担心Google服务框架的普及度。国内google服务确实很多被墙, 非常不稳定。 但GCM却是例外, 看看你的gmail的新邮件通知, 你就明白了。而对于Google服务框架在手机的普及度, 我想我们不用太担心, 的确是很多山寨机的rom里面没有带着个Google服务框架, 但大部分正规厂商已经非常重视这个问题, 像华为,中兴,魅族,小米等都有内嵌Google服务框架。另外, 并不是说没有Google Market, Google Sync, 就不能用GCM, 在部分华为手机上就是这样。

千万要慎重考虑自己搭建push服务器, 这个成本, 不管是开发成本还是维护成本, 都是小的创业公司难以承受的。Push 服务与传统的网页服务器有很大的区别, 传统的网页服务器请求过程短, 连接建立, 请求,回复,断开连接, 没有长期与服务器建立连接,不会给服务器造成很大的压力。而Push 服务就很不同, 技术实现也非常不同, 需要长时间与服务器建立连接, 空闲度很高,效益比很低。

我是做国外产品的, 利用Google Analytics 做过简单的统计,有近99.32%的设备是支持GCM的。

Image Title

GCM做的真是不错, 我是吃过亏的。 中国人就是贪, 什么事情都想自己做, 什么都做不好。 我们自己做过Push服务, 结果 开发难度,效果和维护成本我们都很难承受;可是老板要, 我们只能硬着头皮上, 做到后面又被迫迁移到GCM上来。

GCM的效果非常好, 只要是网络有连接, 不管是你的手机怎么样, 都可以立即通知到消息。

这个组件的配置方式很简单, 说明文档在android开发者网站.

最近看了MiUI v5,发现这货竟然开始不内嵌Google Service Framework了, 既然这样, 上面的啰嗦, 大家就视而不见了吧。
据说国内做的比较好的是个推, 没试过, 不知道怎么样。

Google Analytics

Image Title

谷歌分析不是必须的, 你可以选择国内的友盟统计。 友盟的统计会相对简单了些, 但应该能满足日常的需求。

再啰嗦一句, 千万也不要自行统计。 不光服务器代码要自己开发, 手机端还要处理网络不存在时的缓存处理。 最难的是还要自己写脚本分析数据。 不说别的, 光一个简单的用户地理位置分析, 估计就能搞死你。

所以, 我的同胞们, 我们的老板们, 现成的优秀的组件要会用, 不要什么都自己想着自己做, 你是做产品的不是做统计的, 那是友盟的活, 你都做了人家怎么活?

greenDAO

网站

Image Title

这是我认为最好的Android ORM了。Android支持SQlite数据库, 但那个数据库操作叫一个复杂啊, 不光代码难看, 维护起来还非常不方便。一般我都不用数据库存储, 能文件就文件存储了, 直到我直到了greenDAO。 这货解决了一个大难题。

greenDAO分成两部分, 一部分用于生成数据库操作代码, 一部分用于在Android工程里面提供底层支持。greenDAO对每一个表都生成相应的对象, 在查询,插入等操作时只需要对这个对象进行操作就可以了。可以非常优雅的完成数据库操作的指令。

我知道某些服务器后端程序员,开始撅嘴了:笑话, 我们服务器后端有多少多少好的ORM, 不知道比你这个好上多少倍! 
我们是搞Android开发的好不好, android才不过五六年的时间好不好!

我们先来看看一段代码:

QueryBuilder qb = userDao.queryBuilder();
qb.where(Properties.FirstName.eq("Joe"),
qb.or(Properties.YearOfBirth.gt(1970),
qb.and(Properties.YearOfBirth.eq(1970), Properties.MonthOfBirth.ge(10))));
List youngJoes = qb.list();

这就是greenDAO里面的数据库查询, 简单吧? 赶快来用用吧!

Log4j

官方网站

Image Title

做软件开发, 没有个日志组件是不行的。 Android原生的日志服务太简陋了, 连输出的文件都没有。

android-log4j配置稍微有些麻烦, 需要下载多个jar包, 包括log4j, android-log4j等。 我自己用proguard封了一个包, 用来输出日志到文件没有问题, 提供给大家。下载地址

final LogConfigurator lc = new LogConfigurator();
lc.setFileName(PATH_LOGGER_FILE);//日志文件路径
lc.setFilePattern("%d - [%-6p-%c] - %m%n");//日志输出格式
lc.setMaxBackupSize(2);//最多的文件备份个数, 超过后log4j将自行删除
lc.setMaxFileSize(1024 * 1024);//最大的日志大小, 超过后log4j将备份下来, 再新建一个文件。
lc.setRootLevel(Level.DEBUG);
// Set log level of a specific logger
lc.setLevel("org.apache", Level.DEBUG);
lc.configure();

把上述代码, 放在程序初始化的过程中。

private Logger logger = Logger.getLogger("LoggerName");
logger.debug("Log text");

就可以输出日志到文件了。

Common IO

官方网站

Image Title

Common IO跟log4j同属于Apache开源基金会。 主要对文件操作, 数据流操作提供了非常多简单的函数。

gson

官方网站

Image Title

不知道大家平常与服务器端做数据通信是用什么协议的, 千万不要自己发明啊。我见过最奇葩的通信协议是: 一个字段标示后面数据的长度, 然后拼接成字节数组作为通信协议。这种方式开发难不说, 调试起来非常不方便。 更奇葩的是, 还有人一直坚持的这么用, 真是不思进取啊。

我们经常用的是json。 协议非常简单, 还是明文的, 非常容易调试。 前后端合作非常顺畅。
gson的工作是把json的字符串直接转换为java的对象, 也可以把java的对象直接转换为字符串。 使用方式非常简单。

另外google有一个非常高效的数据协议叫protobuf,据说也很好, 不过数据没有json明文好调试, 一直都没有用。

最后还要吐槽下:若是网络链接是https, 不管是url还是返回的数据都是加密传输的, 不需要再什么DES加密一次了, 这是多次一举。

这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、 以及一些APP共通模块(比如:版本更新、意见反馈、引导界面等等)的开发包,帮助程序员 快速开发自己的APP 已集成第三方开源组件: 网络请求库android-async-http 图片异步加载库universal-image-loader Sqlite数据库操作ormlite-android 社会化分享ShareSDK+短信验证码 Zxing二维码库 百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineoldandroids 表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、删除表等API 提示信息对话框工具类(ToolAlert.java),已集成泡泡、土司、对话框三种提示 文件操作工具类(ToolFile.java),assets/raw/xml/shrePerface/等文件读写API 地图定位工具类(ToolLocation.java),读取GPS状态、请求定位、获取经纬度等方法 社会化分享工具类(ToolShareSDK.java),各大开发平台分享API操作 短信验证码工具类(ToolMSM.java),移动/联通/电信三网发送手机短信验证码、异步回调验 证结果 字符串操作工具类(ToolString.java),生成UUID、非空非NULL逻辑判断、生成MD5等常用共 通方法 数据操作工具类(ToolData.java),自动递归获取表单数据封装成Map、本地数据分页共通方 法等 图片操作工具类(ToolPicture.java),生成二维码、验证码、灰度、合成、圆角、水印等操 作 读取本地资源工具类(ToolResource.java),反射本地资源文件API,避免依赖R文件,方便 jar形式发布 Android单位转换工具类(ToolUnit.java),sp/dp/px互转 自定义Toast工具类(ToolToast.java),自定义背景色、字体颜色、大小、边框等 Properties操作工具类(ToolProperties.java),读写Properties文件操作 网络操作工具类(ToolNetwork.java),获取网络信息、更改切换网络等相关操作 日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/XMLPullPaser模式解析、生成XML操作 XMPP操作工具类(ToolXMPP.java),基于XMPP协议的相关API操作 适配字体工具类(ToolAutoFit.java),代码根据设备密度自动缩放View的字体大小 LOG相关工具类(ToolLog.java) 功能待续-->切入记录异常日志,并存储文件或上传至服务 器 已封装/收集自定义控件: 兼容低版本的SwitchButton 追加自定义属性Value的CheckBox/RadioButton/RadioGroup/SingleSpinner 圆角提示信息TipsView 圆角图片RoundImageView 自定义样式风格Progres
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值