想第一時間獲取我的最新文章,請關注公眾號: 技術特工隊
在上上一篇文章《Android Studio 3.0版本正式釋出啦》 中說到AS 3.0 正式版已經出來了,講到新版本支援的一些新特性,那麼今天就來說說新版本中 Moudle 中 build.gradle 檔案中的變化。
我們來看看新建一個專案在 Moudle 中的 dependencies 中的變化。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}複製程式碼
發現我們經常新增依賴使用的 compile
不見了,而現在改變為 implementation
了,那麼就來看看這個到底是有什麼新的意思呢。
其實在新版本 Android Gradle plugin 3.0
中 已經將 compile
標記為過時了,而取而代之的是 implementation
和 api
兩個關鍵字。那麼它們有什麼區別呢?
api
關鍵字 其實等同於 compile
。但為什麼要換個名字呢,目前還沒有查到相關的資訊,如有大神知道,請留言告知。
implementation
: 使用了該命令編譯的依賴,它僅僅對當前的 Moudle 提供介面。例如我們當前專案結構如下:
LibraryA 中引用了 LibraryC 的庫,如果對 LibraryC 的依賴用的是 implementation 關鍵字。 如下:
dependencies {
. . . .
implementation project(path:':libraryC')
}複製程式碼
那麼 LibraryC 中的介面,僅僅只能給 LibraryA 使用,而我們的 App Moudle 是無法訪問到 LibraryC 提供的介面的,也就是將該依賴隱藏在內部,而不對外部公開。這就是 implementation 關鍵字的作用。
那為什麼要這麼做呢?
答案是: 1. 加快編譯速度。2. 隱藏對外不必要的介面。
為什麼能加快編譯速度呢?
這對於大型專案含有多個 Moudle 模組的, 以上圖為例,比如我們改動 LibraryC 介面的相關程式碼,這時候編譯只需要單獨編譯 LibraryA 模組就行, 如果使用的是 api 或者舊時代的 compile,由於App Moudle 也可以訪問到 LibraryC ,所以 App Moudle 部分也需要重新編譯。當然這是在全編的情況下。
至於編譯速度的對比,國外有個小哥已經做了簡單的對比,效果還是不錯。地址可點選原文跳轉過去檢視。
那麼我們現有專案中的依賴如何修改呢? 答案是:將 compile 都修改為 implementation 然後嘗試進行專案構建,如果構建成功那麼恭喜你,如果構建不成功,則檢視相關的依賴項,並將其修改為 api 關鍵字依賴。
好了,今天就介紹這一個知識點,如果你有收穫就關注我們吧,或者給我點個贊吧。