做爲 Android 開發人員,有沒有羨慕過 node.js 的導入三方庫的方式,node.js 社區爲開發者準備了一個快速可靠的依賴管理庫。這樣的依賴管理庫,讓 node.js 導入依賴庫,很是的方便,一行代碼就搞定了,npm install <library>
。java
爲了搞定這個問題,一個國外的程序員 @cesarferreira 作了一個庫來支持這樣的功能 drone。node
Github 地址:android
接下來咱們來看看 drone 的使用和細節原理。程序員
drone 在 Android 項目中,實現了 npm 對 node.js 的功能。github
它維護了 50 個經常使用的第三方依賴庫庫,差很少能夠覆蓋 90% 咱們經常使用的開源庫,例如:rxjava、Gson、Picasso、recyclelerview-v7 等。npm
當咱們須要使用某個庫的時候,只須要一行命令,就能夠將這個庫引入到咱們工程的 build.gradle
的 dependencies 中。這個過程當中,會默認爲咱們引入最新的版本,無需關心應該引入的三方庫的最新版本號。json
算是 Android 下的一個很是好用的導包工具。工具
由於自己 drone 是使用 node.js 實現的,因此這裏須要 npm 的環境才能夠安裝它,node.js 基本上就是無腦安裝,這裏默認你已經安裝了 node.js 的環境了。學習
安裝 drone 也很是的簡單,一行代碼搞定。
npm install -g drone
安裝完成以後,咱們就能夠正常使用它了。
使用 drone 添加依賴庫,只須要經過 drone add
命令便可。
drone add creator/library module
drone add
須要指定庫的別名和須要導入的 App Module。
能夠看到,它會主動將咱們須要庫查詢出來,插入到 build.gradle
的 dependencies 中。
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 去查詢到最新的版本號,這裏再也不展開細節看了。
到這裏,我好奇的地方就獲得瞭解決,在來回顧一下這些細節。
今天在承香墨影公衆號的後臺,回覆『成長』。我會送你一些我整理的學習資料。
點贊或者分享吧~