本文共 2198 字,大约阅读时间需要 7 分钟。
一、前言
作为 Android 开发人员,有没有羡慕过 node.js 的导入三方库的方式,node.js 社区为开发者准备了一个快速可靠的依赖管理库。这样的依赖管理库,让 node.js 导入依赖库,非常的方便,一行代码就搞定了,npm install <library>。
为了搞定这个问题,一个国外的程序员 @cesarferreira 做了一个库来支持这样的功能 drone。
Github 地址:
接下来我们来看看 drone 的使用和细节原理。
二、drone 的使用细节
2.1 什么是 drone
drone 在 Android 项目中,实现了 npm 对 node.js 的功能。
它维护了 50 个常用的第三方依赖库库,差不多可以覆盖 90% 我们常用的开源库,例如:rxjava、Gson、Picasso、recyclelerview-v7 等。
当我们需要使用某个库的时候,只需要一行命令,就可以将这个库引入到我们工程的 build.gradle 的 dependencies 中。这个过程中,会默认为我们引入最新的版本,无需关心应该引入的三方库的最新版本号。
算是 Android 下的一个非常好用的导包工具。
因为本身 drone 是使用 node.js 实现的,所以这里需要 npm 的环境才可以安装它,node.js 基本上就是无脑安装,这里默认你已经安装了 node.js 的环境了。
安装 drone 也非常的简单,一行代码搞定。
安装完成之后,我们就可以正常使用它了。
2.2 使用 drone
使用 drone 添加依赖库,只需要通过 drone add 命令即可。
drone add 需要指定库的别名和需要导入的 App Module。
可以看到,它会主动将我们需要库查询出来,插入到 build.gradle 的 dependencies 中。
drone 的支持的功能还有很多,增删改查都是最正常的操作,其他操作可以查看它的帮助文档。
drone 的使用还是非常方便简单的,基本上看看帮助文档就可以搞定了,就不再展开说了。
三、drone 的原理
drone 的使用非常的简单,不知道你有没有好奇它是如何维护这些库的。我们只是指定了一个库的名称,它就能立刻确定它最新的稳定版版本号。
接下来我们来继续探索一下 drone 的原理,满足好奇心。
首先看看 drone 的整个项目结构,它是完全使用 node.js 开发完成的,它所有支持的命令都被定义在 tasks 目录下。
而 drone 的入口是 router.js ,所有的命令都需要通过 router.js 进行分发。
我们找一个最常用的命令 add 来看看它的具体细节。
可以看到,它首先使用 QuickSearch.search() 查找我们输入的库的细节,然后使用 hive.getWithVersions() 查找到我们需要的三方库最新稳定版的版本号。最终使用 handleGradleDependencyInjection() 方法,将它输入到我们指定 Module 的 build.gradle 的具体位置。
handleGradleDependencyInjection() 方法不用看,应该就是一个 io 操作,去写 build.gradle 文件。
先来看看 QuickSearch.search() 方法。
这里通过 string-similarity 这个字符串相似度比较库,去查找出我们需要引入的库的细节,这些信息,被配置在 constants.js 文件中。
可以看到,这里被另外一个 github 开源库 drone-hive 所维护。
drone-hive 中,维护了比较常用的 50 个开源库的信息。
我们随便找一个看看,这里看看 airbnb/lottie-android。
可以看到,它维护了开源库的各项信息,而其中的 repository 指定了开源库的类型,它最终可以用于区分我们使用什么方式去获取最新的版本号。
这个逻辑在 metadata.js 文件中。
例如这里查看的 airbnb/lottie-android 就是通过 jitpack.io 进行查询,当然 drone 是使用 jitpack.io 的查询 Api 去查询到最新的版本号,这里不再展开细节看了。
四、小结
到这里,我好奇的地方就得到了解决,在来回顾一下这些细节。
drone 主要用于 Android 开源库的管理。
drone 可以自动操作 Gradle dependencies。
drone 维护的 50+ 的开源库,所有的信息维护在另外一个库中,drone-hive。
drone-hive 维护了这些开源库的信息,在不同库的 xxx/xxx.json 文件中。
根据在 hive 中配置的 repository 类型,使用不同的方式,获取稳定版版本号。
最终使用 io 操作,修改我们指定 Module 的 build.gradle 文件。
原文发布时间为:2017-10-17
本文作者:张旸
本文来自云栖社区合作伙伴“51CTO”,了解相关信息可以关注。
转载地址:http://vijta.baihongyu.com/