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

简介:

一、前言

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

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

Github 地址:

https://github.com/cesarferreira/drone

接下来我们来看看 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 也非常的简单,一行代码搞定。

npm install -g drone

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

2.2 使用 drone

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

drone add creator/library module

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

/add3.gif

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

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

/help.png

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

三、drone 的原理

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

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

/project-path.png

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

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

/routerjs.png

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

/add-task.png

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

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

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

/quick-search.png

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

/constantsjs.png

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

https://github.com/cesarferreira/drone-hive

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

/hive-project-path.png

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

/lottie-json.png

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

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

/getlastversion.png

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

/JitPackage.png

四、小结

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

  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 文件。

本文转自承香墨影博客园博客,原文链接:http://www.cnblogs.com/plokmju/p/7654523.html,如需转载请自行联系原作者

相关文章
|
4月前
|
缓存 资源调度 持续交付
在清空NPM缓存后,检查是否所有依赖都已正确安装
在清空NPM缓存后,检查是否所有依赖都已正确安装
|
2月前
|
Java Spring
Gradle 如何确保依赖的版本兼容性
Gradle 通过依赖管理机制确保版本兼容性,使用声明式配置定义项目依赖,自动解析和下载所需库。它支持版本范围和动态版本,通过冲突解决策略选择最佳版本,保证构建的一致性和可靠性。
187 3
|
2月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
373 3
|
2月前
|
缓存 资源调度 持续交付
在清空NPM缓存后,我如何检查是否所有依赖都已正确安装?
【10月更文挑战第5天】在清空NPM缓存后,我如何检查是否所有依赖都已正确安装?
|
2月前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益
|
3月前
|
JavaScript
使用npm,快速构建第一个vue项目
本文介绍了如何使用npm快速构建第一个Vue项目。步骤包括确保安装了Node.js并且配置了正确的环境变量,创建一个空文件夹并使用VSCode打开,通过VSCode的终端执行`npm init vue@latest`命令以初始化项目,选择默认配置即可。接着安装项目依赖并启动开发服务器,最后通过浏览器访问开发服务器提供的本地地址查看项目运行结果。文章还提供了相关代码和操作截图。
|
3月前
|
缓存 JavaScript 前端开发
8种方法解决vue创建项目报错:command failed: npm install --loglevel error
该文章提供了八种解决Vue项目创建时遇到的`command failed: npm install --loglevel error`错误的方法,包括清理缓存、更换npm源、重新安装Node.js等措施。
8种方法解决vue创建项目报错:command failed: npm install --loglevel error
|
4月前
|
缓存 资源调度 持续交付
在清空NPM缓存后,如何检查是否所有依赖都已正确安装
在清空NPM缓存后,如何检查是否所有依赖都已正确安装
|
5月前
|
运维 Kubernetes Java
阿里云云效操作报错合集之npm包已经发布到了制品仓库,但流水线中拉取依赖时出现404错误,该如何排查
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
阿里云云效操作报错合集之npm包已经发布到了制品仓库,但流水线中拉取依赖时出现404错误,该如何排查
|
4月前
|
存储 安全 Java
阿里云云效产品使用合集之怎么设置使用npm私有仓库进行流水线拉取依赖
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。