天天看點

像 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。

可以看到,它會主動将我們需要庫查詢出來,插入到

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 所維護。

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

drone-hive 中,維護了比較常用的 50 個開源庫的資訊。

我們随便找一個看看,這裡看看 airbnb/lottie-android。

可以看到,它維護了開源庫的各項資訊,而其中的 repository 指定了開源庫的類型,它最終可以用于區分我們使用什麼方式去擷取最新的版本号。

這個邏輯在

metadata.js

例如這裡檢視的 airbnb/lottie-android 就是通過 jitpack.io 進行查詢,當然 drone 是使用 jitpack.io 的查詢 Api 去查詢到最新的版本号,這裡不再展開細節看了。

四、小結

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

  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://plokmju.cnblogs.com/

如非授權,禁止轉載!