@author ASCE1885的 Github 簡書 微博 CSDN 知乎
本文由于潛在的商業(yè)目的,不開放全文轉(zhuǎn)載許可,謝謝!

Android 應用開發(fā)中,經(jīng)常需要將第三方開源函數(shù)庫作為依賴引入工程中,通常情況下官方提供的都是在線依賴方式,如下所示是引入 greenDAO 3 的配置:
buildscript {
repositories {
mavenCentral()
}
dependencies {
// greenDAO 所需的 gradle 插件
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
}
}
// 應用 greenDAO 插件
apply plugin: 'org.greenrobot.greendao'
dependencies {
// greenDAO 函數(shù)庫
compile 'org.greenrobot:greendao:3.2.0'
}
可以看到,引入 greenDAO 3 需要下載兩種類型的依賴:
- greenDAO 3 所需的 gradle 插件及其依賴
- 開發(fā)者用到的 greenDAO 3 函數(shù)庫
如果是個人開發(fā),那么使用這種在線依賴的方式并沒有什么大問題,但如果是團隊開發(fā),每個成員都要在自己電腦上下載一次這些依賴項,如果網(wǎng)速快還好說,可能只需等個幾分鐘,但如果網(wǎng)速比較慢,有時需要等上半天,這顯然是降低團隊效率的事。因此,團隊開發(fā)中,要么搭建私有的 maven 倉庫提高下載速度,要么直接將在線依賴方式改為離線依賴的方式,省去下載的耗時。
為了實現(xiàn)離線依賴,首先當然需要有人將這些依賴下載到本地,然后上傳到版本控制系統(tǒng)例如 git 中,那么如何下載呢?我們當然可以到 maven 倉庫中一個一個依賴地去查找并下載,但推薦的方式是走一遍在線依賴下載的方式,讓 gradle 幫我們?nèi)ハ螺d到本地的緩存中。以 Mac 系統(tǒng)為例,但 gradle 按照在線依賴的配置下載完成后,我們可以在 /Users/你的用戶名/.gradle/caches/modules-2/files-2. 目錄中看到之前下載的所有依賴,如下所示:

根據(jù)依賴的包名,我們可以找到對應的 jar 包。以 greenDAO 3 為例,最終我們看到開發(fā)者需要引入工程中的依賴有兩個:
- greendao-3.2.0.jar
- greendao-api-3.2.0.jar
而 greenDAO 3 所需的 gradle 插件及其依賴就有點多了,如下所示,可以看到這個插件使用 Kotlin 編寫的,插個題外話,最近很多開源項目中,這種編譯時注解的處理器很多都改用 Kotlin 編寫,除了 greenDAO 3,新興的 ORM 框架 DBFlow 的注解處理器也是用 Kotlin 編寫的。

依賴庫下載完成后,接下來就要修改配置的方式了,開發(fā)者用到的 greenDAO 3 函數(shù)庫的修改很簡單,只需將對應的 jar 包拷貝到相應 Module 的 libs 目錄中,并將 build.gradle 中的
dependencies {
// greenDAO 函數(shù)庫
compile 'org.greenrobot:greendao:3.2.0'
}
改為如下所示即可:
dependencies {
compile files('libs/greendao-3.2.0.jar') // orm框架
compile files('libs/greendao-api-3.2.0.jar')
}
greenDAO 3 的 gradle 插件的引入,在線方式是在工程的 build.gradle 文件中添加如下配置:
buildscript {
repositories {
mavenCentral()
}
dependencies {
// greenDAO 所需的 gradle 插件
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
}
}
改成離線依賴也很簡單,修改為指向本地工程目錄即可,下面的配置我們假設(shè)插件及其依賴包放在工程根目錄的 thirdparty/orm/plugin 文件夾中。
buildscript {
dependencies {
// greenDAO 所需的 gradle 插件
classpath fileTree(include: ['*.jar'], dir: 'thirdparty/orm/plugin')
}
}
本文之所以以 greenDAO 3 為例,是因為它是目前 Android 開發(fā)中綜合性能較高的一個框架,如下圖所示:

當然,greenDAO 雖然性能最高,但 2.x.x 版本使用起來并不是很方便,需要在項目中單獨引入一個 Java Module 來實現(xiàn)代碼的生成;在 3.x.x 版本中,greenDAO 3 使用 gradle 插件的方式來實現(xiàn)代碼生成,使用上方便了很多,但存在一個主要的問題是:目前對于 Android Studio 多 Modules 的支持不夠好,如果要在多個 Module 中都使用 greenDAO 3 的話,那么每個 Module 需要單獨建立一個數(shù)據(jù)庫,不支持同一個數(shù)據(jù)庫在不同 Module 之間共用。
我的新書《Android 高級進階》開始正式發(fā)售了,歡迎選購!

歡迎關(guān)注我的微信公眾號 ASCE1885,專注與原創(chuàng)或者分享 Android,iOS,ReactNative,Web 前端移動開發(fā)領(lǐng)域高質(zhì)量文章,主要包括業(yè)界最新動態(tài),前沿技術(shù)趨勢,開源函數(shù)庫與工具等。
