Android Studio 新增依賴的幾種方式
1、庫依賴(library)
2、模組依賴(module)
以上兩種又可以分為內部和外部
a、內部庫
在工程的lib下直接貼上jar、aar檔案,androidstudio會自動載入指定目錄下的依賴庫。
即粘貼後,右鍵add as library。build.gradle會自動新增compile files(‘libs/gson-2.3.1.jar’)
目錄:project\app\libs\
b、外部庫
gradlede 標準依賴方式,匯入、管理、升級非常快捷,可在project structure中搜索新增。
在專案配置檔案中宣告中心倉庫,自動生成的專案中,as會預設配置好,預設倉庫為jcenter,也可以使用maven。
dependencies標籤下宣告
compile
as會從中心倉庫下載相應版本的庫檔案。實際檔案一般在/使用者資料夾/.gradle\caches\modules-2\files-2.1
並在工程結構的ExternalLibraries中列出,這也就是為什麼叫這種為“外部庫”
這裡的引入配置程式碼需要庫的提供方提供,一般githug的專案如果同時支援gradle構建方式引用,會在readme裡面說明,如果沒在github上,可以去中央倉庫去搜,中央倉庫的位置是可以從配置檔案裡追溯原始碼追到的。jcenter:
c、內部模組
一個project下面可以包括很多個module,這些module可以是相互完全獨立的,也可以是被依賴的。
如果一個module被一個或多個其他module依賴,需要在module的builder.gradle檔案把當前模組宣告為Library
即不能用
apply plugin: ‘com.android.application’
要用
apply plugin: ‘com.android.library’
在頂層工程目錄下的settings.gradle中include模組名
include ‘:app’,’:module-name’
這樣同步後,dependencies標籤下自動新增宣告compile project
為什麼要將complie(api)替換成為implemention呢?
implementation : 使用了該命令編譯的依賴,它僅僅對當前的 Moudle 提供介面
答案是: 1. 加快編譯速度。2. 隱藏對外不必要的介面。
為什麼能加快編譯速度呢?
LibraryA 中引用了 LibraryC 的庫,如果對 LibraryC 的依賴用的是 implementation 關鍵字,那麼 LibraryC 中的介面,僅僅只能給 LibraryA 使用,而我們的 App Moudle 是無法訪問到 LibraryC 提供的介面的,也就是將該依賴隱藏在內部,而不對外部公開。這就是 implementation 關鍵字的作用。
這對於大型專案含有多個 Moudle 模組的,比如我們改動 LibraryC 介面的相關代LibraryC 介面的相關程式碼,這時候編譯只需要單獨編譯 LibraryA 模組就行, 如果使用的是 api 或者舊時代的 compile,由於App Moudle 也可以訪問到 LibraryC ,所以 App Moudle 部分也需要重新編譯。當然這是在全編的情況下。