开发必须了解的10个Android库

作为一个开发者来说,避免重复造轮子是很重要的,能让你节省很多时间去专注于开发自己的业务。2018年已经过去一大半了,今天介绍下今年以来业界内比较推崇的几个框架,希望能提高大家的开发效率。

Retrofit

Retrofit是一个可以把 REST API定义成接口的HTTP客户端。用它可以轻松简洁的管理请求 Header, Body和参数。 Retrofit也支持同步和异步调用

interface ApiService {
  @GET("movie/{id}")
  fun getMovieDetails(@Path("id") id: String) : Call<MovieDetails>
}

当然它也支持Rx,如果你习惯用RxJava的话它也可以提供同样的链式调用。

Moshi

Moshi是一个将JSON转换成Java或者Kotlin对象的库。很多人把Moshi类比GSON3.0,然而Moshi比GSON有更多的优点。 它速度更快,而且兼容Kotlin,还能可控的抛出异常。 这是一段用Moshi进行转换的Kotlin代码

val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter(Model::class.java)

/* JSON to Model */
val model = jsonAdapter.fromJson(json)

/* Model to JSON */
val json = jsonAdapter.toJson(model)

Chuck

Chuck是一个HTTP嗅探的工具,它可以监听你应用的HTTP请求,然后在通知栏显示出http的log。 你可以点击通知栏的Chuck来进入Chuck的界面去查看完整的http请求记录。测试团队也可以通过Chuck来检验某个问题是Android端的还是服务端导致的。 Chuck有时候功能不仅可以代替log,因为app在重启之后可能会丢失log记录,而Chuck会记录下来。

Glide

众所周知,Android在处理图片方面的系统API非常不友好。甚至在缩放图片的时候经常发生OOM。Glide是一个图片处理库,它提供了非常简洁方便的API给开发者随意的处理图片。

GlideApp.with(context)
  .load(url)
  .centerCrop()
  .placeholder(R.drawable.ic_placeholder)
  .into(imageView)

Glide可以非常方便的通过url加载图片,它也提供回调方法,缓存和缩放各方面的功能。如果在没有Glide的情况下来实现这些功能是非常痛苦的一件事情。Glide甚至支持简单的图片变形,比如处理成圆形。

ThreeTen

ThreeTen是一个处理日期和时间的Library。它满足 JSR-310标准,在Java8里已经作为标准库被集成到 java.time.* 包里面。它之所以火起来是因为标准的Android Calendar API非常不友好。一段ThreeTen的demo代码像下面这样

/* Current DateTime */
LocalDateTime.now()

/* String to DateTime */
val localDateTimeString = "2011-12-03T10:15:30"
val localDateTime = LocalDateTime.parse(localDateTimeString)

对比另外一个处理时间日期的库 JodaTime,ThreenTen更小,方法数更少。ThreeTen的API也更简洁。不过如果你的项目已经在使用JodaTime,不建议换到ThreeTen,如果是新项目的haul,强烈建议使用ThreeTen。

Timber

Timber是一个基于Andorid Log的log库。Android的log功能不够强大,很多项目都开发了自己的log工具。Timber可以轻松的打开和关闭log,它对string log的格式化,还有异常的处理也都有很好的支持。很多开源项目看中了Timber的这一点,用它作为核心库之一。

/* Log error */
Timber.e("Error happened")

/* Log warning with params */
Timber.w("Your variable value is %s", variable)

/* Log exception */
try {
  ...
} catch (e: Exception) {
  Timber.e(e)
}

Room

Room是Android官方的ORM框架。ORM是以面向对象的思路来处理数据/数据库的一种技术。Room提供跟Retrofit类似的完美的API接口。同时它也依赖注解和标准SQL语法。

@Dao
interface MovieDao {
  @Query("SELECT details FROM movies WHERE id = :id")
  fun getMovieDetails(id: String): MovieDetails
}

Room也支持Rx和LiveData,所以你可以随心所欲地使用它。跟其他ORM框架对比的话,Room不需要阅读复杂的文档才能明白如何使用,它没有复杂的API。这样是它的优势。

RxJava

RxJava是 ReactiveX API的一个Java实现,它用链式调用的方式代替了原有Java的编程思维。开发者更愿意看到实时更新的UI,换句话说他们更愿意看到UI能随着数据的变化而自动更新。 当我们在处理数据的时候,通常在切换线程和错误,还有在多个API之间调用的时候情况会变的复杂。RxJava能很好的处理这种情况。虽然RxJava不容易上手,但真的很值得花时间去学习掌握。当RxJava跟Kotlin结合的时候,两者的优点被一起放大,会让开发者爱不释手。

Single.zip(
  /* Execute first API call and retry twice if it fails */
  apiService.getMovieActors(id).retry(2),
  /* Execute second API call and retry twice if it fails */
  apiService.getMovieDetails(id).retry(2),
  /* Receive successful results and merge them into single model */
  BiFunction<List<Actor>, MovieDetails, Movie> { actors, details -> Movie(details, actors) }
)
  /* Execute API calls on IO thread */
  .subscribeOn(Schedulers.io())
  /* Receive results on MainThread */
  .observeOn(AndroidSchedulers.mainThread())
  .subscribeBy(
    onError = { /* Handle error */ },
    onSuccess = { /* Handle full movie data */ }
  )

上面这段代码可以尝试用Java来实现,你会疯的。

AndroidKTX

Android KTX是一个把Android API用Kotlin封装起来的库。这个库的目标是让Android API使用起来更友好。它把Kotlin上很多不错的Feature都移植了过去,包括命名参数,lambda表达式,默认参数值。

/* Display View */
view.isVisible = true

/* Apply padding to all sides */
view.setPadding(padding)

/* Update padding on any side */
view.updatePadding(left = newPadding, right = newPadding)

/* Quick Toast */
toast("Display test toast")

/* New way to create bundle */
bundleOf {
  "key1" to item1
  "key2" to item2
}

/* Better way to use SharedPreferences */
sharedPreferences.edit {
  putString("key1", "value1")
  putString("key2", "value2")
}

Android KTX支持了很多扩展功能,想深入了解的唯一方法是取阅读它的源码看它是怎么支持的。KTX改变了开发者使用Android API的方式,如果你的项目使用的是Kotlin,那么它应该成为你的核心库之一。

Dagger

没有Dagger的排行榜不完整。Dagger是一个编译器注入的依赖注入框架。它跟RxJava一样虽然不够容易理解,但是在上手之后会对你的项目带来非常大的便利。 关于Dagger,google有一个著名的咖啡机的例子可以了解一下,我之前也发过几篇分析的文章,可以了解一下Dagger2应用:接入Dagger2 Android应用:@Component和@ModuleDagger2 Android应用:@Scope和@Subcomponent总的来说,依赖注入是一种把小模块以最少努力的方式提供给其他模块使用的方式。简单的话拿汽车作为例子,你可以轻易的更换轮胎的类型而不需要对汽车本身做什么修改。 对于大型项目来说,开发者不希望手工地去处理依赖注入,因为这不容易维护。Dagger通过注解帮开发者完成了这些事情。 之前Dagger在服务端大型项目上应用比较多,去年开始Google也把Dagger作为Android的模块之一合并进了Android项目了。

==== 今日沙雕 ====

原文发布于微信公众号 - Android每日一讲(gh_f053f29083b9)

原文发表时间:2018-08-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏纯洁的微笑

Spring Boot 2.0 版的开源项目云收藏来了!

12930
来自专栏农夫安全

BurpSuite中的安全测试插件推荐

? 首先放出一张小编一直在用的几个插件~ 0x00 前言 ? 0x01 AuthMatrix AuthMatrix是一款用于检测越权漏洞的Burp ...

76750
来自专栏玄魂工作室

实战-如何获取安卓iOS上的微信聊天记录、通过Metasploit控制安卓

在这篇文章中我们将讨论如何获取安卓、苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制。文章比较基础、可动手性强,有设备的童...

90090
来自专栏菩提树下的杨过

Spring官网下载dist.zip的几种方法

Spring官网改版后,很多项目的完整zip包下载链接已经隐掉了,虽然Spring旨在引导大家用更“高大上”的maven方式来管理所依赖的jar包,但是完全没想...

20170
来自专栏杨建荣的学习笔记

dg broker校验失败的一个奇怪问题(r8笔记第50天)

前几天碰到一个看起来有些奇怪的例子,今天抽空把分析过程整理了一下。 有一主一备的一套测试环境,之前环境在我手里,交给另外一个同事之后,重新搭建了dataguar...

29450
来自专栏FreeBuf

变换姿势:从DHCP再挖破壳漏洞利用

破壳漏洞(Shellshock)影响深远,利用起来似乎没那么容易,所以对于破壳漏洞研究利用的新方法会间歇性地出现。众所周知,利用破壳漏洞攻击Web应用程序一直是...

21370
来自专栏SpringBoot 核心技术

第四十七章:SpringBoot2.0新特性 - Quartz自动化配置集成本章目标SpringBoot 企业级核心技术学习专题构建项目测试总结

76630
来自专栏Linyb极客之路

微服务架构:spring cloud简介

1.什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的We...

43380
来自专栏FreeBuf

判断是否支持Heartbeat的NSE脚本

服务端支持heartbeat是存在heartbleed漏洞的必要条件,如果判断出某SSL端口不支持heartbeat,那基本上就可以排除风险了。 在SSL握手...

20170
来自专栏Theo Tsao

Ionic3学习笔记(十六)上传头像至第三方图床

个人做的开源 Demo 登录注册模块采用的是 Wilddog 野狗通讯云的身份认证服务,不得不说各方面和 Google 收购的 Firebase 很像,十分简...

18610

扫码关注云+社区

领取腾讯云代金券