1. 程式人生 > >新版AndroidStudio3較2.X中Moudle 的新特性

新版AndroidStudio3較2.X中Moudle 的新特性

還再用compile依賴?那你就落後啦
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 兩個關鍵字。那麼它們有什麼區別呢?

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關鍵字依賴。