像 npm 同樣在 Andriod 項目中引入 Gradle 依賴

/WechatIMG2.jpeg

1、前言

做爲 Android 開發人員,有沒有羨慕過 node.js 的導入三方庫的方式,node.js 社區爲開發者準備了一個快速可靠的依賴管理庫。這樣的依賴管理庫,讓 node.js 導入依賴庫,很是的方便,一行代碼就搞定了,npm install <library>java

爲了搞定這個問題,一個國外的程序員 @cesarferreira 作了一個庫來支持這樣的功能 dronenode

Github 地址:android

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

接下來咱們來看看 drone 的使用和細節原理。程序員

2、drone 的使用細節

2.1 什麼是 drone

drone 在 Android 項目中,實現了 npm 對 node.js 的功能。github

它維護了 50 個經常使用的第三方依賴庫庫,差很少能夠覆蓋 90% 咱們經常使用的開源庫,例如:rxjava、Gson、Picasso、recyclelerview-v7 等。npm

當咱們須要使用某個庫的時候,只須要一行命令,就能夠將這個庫引入到咱們工程的 build.gradledependencies 中。這個過程當中,會默認爲咱們引入最新的版本,無需關心應該引入的三方庫的最新版本號。json

算是 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 的使用仍是很是方便簡單的,基本上看看幫助文檔就能夠搞定了,就再也不展開說了。

3、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/cesarferre...

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

4、小結

到這裏,我好奇的地方就獲得瞭解決,在來回顧一下這些細節。

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

今天在承香墨影公衆號的後臺,回覆『成長』。我會送你一些我整理的學習資料。

點贊或者分享吧~

相關文章
相關標籤/搜索