想第一時間獲取我的最新文章焕窝,請關(guān)注公眾號: 技術(shù)特工隊
在上上一篇文章《Android Studio 3.0版本正式發(fā)布啦》(可點擊傳送)中說到AS 3.0 正式版已經(jīng)出來了章喉,講到新版本支持的一些新特性,那么今天就來說說新版本中 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'
}
發(fā)現(xiàn)我們經(jīng)常添加依賴使用的 compile 不見了凭语,而現(xiàn)在改變?yōu)?strong>implementation 了,那么就來看看這個到底是有什么新的意思呢撩扒。
其實在新版本 Android Gradle plugin 3.0 中 已經(jīng)將 compile 標記為過時了似扔,而取而代之的是
implementation 和 api 兩個關(guān)鍵字。那么它們有什么區(qū)別呢搓谆?
api關(guān)鍵字 其實等同于 compile炒辉,但為什么要換個名字呢,目前還沒有查到相關(guān)的信息泉手,如有大神知道黔寇,請留言告知。
implementation :使用了該命令編譯的依賴斩萌,它僅僅對當(dāng)前的 Moudle 提供接口缝裤。例如我們當(dāng)前項目結(jié)構(gòu)如下:
LibraryA 中引用了 LibraryC 的庫,如果對 LibraryC 的依賴用的是 implementation 關(guān)鍵字颊郎。 如下:
dependencies {
. . . .
implementation project(path:':libraryC')
}
那么 LibraryC 中的接口憋飞,僅僅只能給 LibraryA 使用,而我們的 App Moudle 是無法訪問到 LibraryC 提供的接口的姆吭,也就是將該依賴隱藏在內(nèi)部榛做,而不對外部公開。這就是 implementation 關(guān)鍵字的作用内狸。
那為什么要這么做呢?
答案是: 1. 加快編譯速度检眯。2. 隱藏對外不必要的接口。
為什么能加快編譯速度呢?
這對于大型項目含有多個 Moudle 模塊的昆淡, 以上圖為例锰瘸,比如我們改動 LibraryC 接口的相關(guān)代碼,這時候編譯只需要單獨編譯 LibraryA 模塊就行瘪撇, 如果使用的是 api 或者舊時代的 compile获茬,由于App Moudle 也可以訪問到 LibraryC ,所以 App Moudle 部分也需要重新編譯港庄。當(dāng)然這是在全編的情況下。
至于編譯速度的對比恕曲,國外有個小哥已經(jīng)做了簡單的對比鹏氧,效果還是不錯。地址可點擊原文跳轉(zhuǎn)過去查看佩谣。
那么我們現(xiàn)有項目中的依賴如何修改呢? 答案是:將 compile 都修改為 implementation然后嘗試進行項目構(gòu)建把还,如果構(gòu)建成功那么恭喜你,如果構(gòu)建不成功茸俭,則查看相關(guān)的依賴項吊履,并將其修改為 api關(guān)鍵字依賴。
好了调鬓,今天就介紹這一個知識點艇炎,如果你有收獲就關(guān)注我們吧,給我點個贊吧腾窝。