像 npm 一样在 Andriod 项目中引入 Gradle 依赖

二次元码农
• 阅读 2819

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

一、前言

作为 Android 开发人员,有没有羡慕过 node.js 的导入三方库的方式,node.js 社区为开发者准备了一个快速可靠的依赖管理库。这样的依赖管理库,让 node.js 导入依赖库,非常的方便,一行代码就搞定了,npm install <library>

为了搞定这个问题,一个国外的程序员 @cesarferreira 做了一个库来支持这样的功能 drone

Github 地址:

https://github.com/cesarferre...

接下来我们来看看 drone 的使用和细节原理。

二、drone 的使用细节

2.1 什么是 drone

drone 在 Android 项目中,实现了 npm 对 node.js 的功能。

它维护了 50 个常用的第三方依赖库库,差不多可以覆盖 90% 我们常用的开源库,例如:rxjava、Gson、Picasso、recyclelerview-v7 等。

当我们需要使用某个库的时候,只需要一行命令,就可以将这个库引入到我们工程的 build.gradledependencies 中。这个过程中,会默认为我们引入最新的版本,无需关心应该引入的三方库的最新版本号。

算是 Android 下的一个非常好用的导包工具。

因为本身 drone 是使用 node.js 实现的,所以这里需要 npm 的环境才可以安装它,node.js 基本上就是无脑安装,这里默认你已经安装了 node.js 的环境了。

安装 drone 也非常的简单,一行代码搞定。

npm install -g drone

安装完成之后,我们就可以正常使用它了。

2.2 使用 drone

使用 drone 添加依赖库,只需要通过 drone add 命令即可。

drone add creator/library module

drone add 需要指定库的别名和需要导入的 App Module。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

可以看到,它会主动将我们需要库查询出来,插入到 build.gradle 的 dependencies 中。

drone 的支持的功能还有很多,增删改查都是最正常的操作,其他操作可以查看它的帮助文档。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

drone 的使用还是非常方便简单的,基本上看看帮助文档就可以搞定了,就不再展开说了。

三、drone 的原理

drone 的使用非常的简单,不知道你有没有好奇它是如何维护这些库的。我们只是指定了一个库的名称,它就能立刻确定它最新的稳定版版本号。

接下来我们来继续探索一下 drone 的原理,满足好奇心。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

首先看看 drone 的整个项目结构,它是完全使用 node.js 开发完成的,它所有支持的命令都被定义在 tasks 目录下。

而 drone 的入口是 router.js ,所有的命令都需要通过 router.js 进行分发。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

我们找一个最常用的命令 add 来看看它的具体细节。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

可以看到,它首先使用 QuickSearch.search() 查找我们输入的库的细节,然后使用 hive.getWithVersions() 查找到我们需要的三方库最新稳定版的版本号。最终使用 handleGradleDependencyInjection() 方法,将它输入到我们指定 Module 的 build.gradle 的具体位置。

handleGradleDependencyInjection() 方法不用看,应该就是一个 io 操作,去写 build.gradle 文件。

先来看看 QuickSearch.search() 方法。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

这里通过 string-similarity 这个字符串相似度比较库,去查找出我们需要引入的库的细节,这些信息,被配置在 constants.js 文件中。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

可以看到,这里被另外一个 github 开源库 drone-hive 所维护。

https://github.com/cesarferre...

drone-hive 中,维护了比较常用的 50 个开源库的信息。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

我们随便找一个看看,这里看看 airbnb/lottie-android。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

可以看到,它维护了开源库的各项信息,而其中的 repository 指定了开源库的类型,它最终可以用于区分我们使用什么方式去获取最新的版本号。

这个逻辑在 metadata.js 文件中。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

例如这里查看的 airbnb/lottie-android 就是通过 jitpack.io 进行查询,当然 drone 是使用 jitpack.io 的查询 Api 去查询到最新的版本号,这里不再展开细节看了。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

四、小结

到这里,我好奇的地方就得到了解决,在来回顾一下这些细节。

  1. drone 主要用于 Android 开源库的管理。
  2. drone 可以自动操作 Gradle dependencies。
  3. drone 维护的 50+ 的开源库,所有的信息维护在另外一个库中,drone-hive。
  4. drone-hive 维护了这些开源库的信息,在不同库的 xxx/xxx.json 文件中。
  5. 根据在 hive 中配置的 repository 类型,使用不同的方式,获取稳定版版本号。
  6. 最终使用 io 操作,修改我们指定 Module 的 build.gradle 文件。

今天在承香墨影公众号的后台,回复『成长』。我会送你一些我整理的学习资料。

像 npm 一样在 Andriod 项目中引入 Gradle 依赖

点赞或者分享吧~

点赞
收藏
评论区
推荐文章
blueju blueju
4年前
私有依赖的打包与上传
首发于<aname"2ro9T"</a背景项目中有三四个私有依赖(只有npm包,无源码),包括我封装的一些插件组件,需要上传到npm私有库,提供给其他同事组们使用。<br/<br/公司已有npm私有库,使用的是NexusRepositoryManager,上传的方式是:提交tgz格式的依赖包。最开始当初的我,
九章 九章
4年前
Android依赖管理与私服搭建
在Android开发中,一个项目需要依赖许多的库,我们自己写的,第三方的等等,这篇文件介绍的就是自己搭建私服,创建自己的仓库,进行对我们自己写的库依赖管理。本文是在macbookpro环境上搭建的,其它操作系统操作方式大致一样的。如果有不一样的地,可以参考官方文档Android中引入依赖的几种方法一直接引
Stella981 Stella981
4年前
CocoaPods使用总结
一、CocoaPods简介CocoaPods是专门为iOS工程提供第三方依赖库的管理工具,通过CocoaPods,我们可以更方便地管理每个第三方库的版本,而且不需要我们做太多的配置,就可以直观、集中和自动化地管理我们项目的第三方库。CocoaPods将所有依赖的库都放在一个名为Pods的项目下,然后让主项目依赖Pods项目
Stella981 Stella981
4年前
Gradle的Android插件
Android构建系统由一个_Gradle_的Android插件组成。 Gradle(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.gradle.org%2F)是一个高级的构建工具集,它可以管理依赖,并使你能够定义定制化的构建逻辑。AndroidStudio使用了一个Gradl
可莉 可莉
4年前
2017 Node.js 开发框架比较
希望这篇文章为大家对Node.js后端框架选型带来一些帮助。JavaScript这门语言的设计虽然被很多人诟病,但是因为其占据了浏览器而且容易上手所以广泛流行。后来随着Node.js的出现,npm包管理带来的强大生态更是如虎添翼(截止到2017年3月npm共有43万个包)。但是这也造成了JS社区变态的快速迭代,大家都直呼赶
Stella981 Stella981
4年前
HarmonyOS应用开发引入第三方库的三种方式
我们在做应用开发的时候,往往需要引入些优秀的第三方库来进行开发,下面就讲讲我们在做HarmonyOS应用开发中引入第三方库的三种方式。1、通过编写gradle依赖进行引入,熟悉maven或者gradle的朋友对这个就太熟悉了。针对这个方式,我就拿个fastjson库的引入进行举例吧,在对应的Module下的build.gradle文件中添加依赖项即可
Stella981 Stella981
4年前
Android 原生库依赖解析Gradle插件
由于官方的AndroidGradle插件无法解析在dependencies中声明的.so库依赖,所以编译时不会把.so文件自动拷贝到jniLibs目录下,这个插件主要就是为了解决这个问题的,并且提供so文件重命名和abi过滤的实用功能.另外如果你是使用maven和androidmavenplugin(https://www.oschi
Stella981 Stella981
4年前
NodeJs在windows上安装配置测试
Node.js简介简单的说Node.js就是运行在服务端的JavaScript。Node.js是一个基于ChromeV8引擎的JavaScript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。Node.js的包管理器npm,是全球最大的开源库生态系统。安装环境本机系统:Windo
Stella981 Stella981
4年前
2017 Node.js 开发框架比较
希望这篇文章为大家对Node.js后端框架选型带来一些帮助。JavaScript这门语言的设计虽然被很多人诟病,但是因为其占据了浏览器而且容易上手所以广泛流行。后来随着Node.js的出现,npm包管理带来的强大生态更是如虎添翼(截止到2017年3月npm共有43万个包)。但是这也造成了JS社区变态的快速迭代,大家都直呼赶
Stella981 Stella981
4年前
Gradle 依赖项管理
defaultTasks"hello"configurations{starling//不进行依赖传递,否则要下载很多依赖项//例如flexframeworkstarling.transitivefalse}repo