Android compile、implementation和api的區(qū)別

最近在優(yōu)化一個(gè)老項(xiàng)目,發(fā)現(xiàn)項(xiàng)目當(dāng)中有一些Module還在使用compile來依賴三方庫,所以就想講講compile、implementation和api有什么區(qū)別

首先我們創(chuàng)建一個(gè)Project,然后再生成一個(gè)Module,并且Project去引用這個(gè)Module


1.png
dependencies {
    XXXXX
    implementation project(path: ':myapplication')
}

這個(gè)時(shí)候假設(shè)Module中引入了一些三方庫,比如谷歌的Gson庫,首先可以明確一點(diǎn),就是compile、implementation和api都能將Gson引入到Module當(dāng)中,那他們到底有什么區(qū)別呢?現(xiàn)在假設(shè)我們使用的是implementation關(guān)鍵字去引入,然后在Project中去嘗試使用Gson,會(huì)發(fā)現(xiàn)Project中根本找不到Gson對象

dependencies {
    XXXXX
    implementation 'com.google.code.gson:gson:2.8.8'
}
2.png

但是如果換成api關(guān)鍵字去引入,則會(huì)發(fā)現(xiàn)能找到Gson對象

dependencies {
    XXXXX
    api 'com.google.code.gson:gson:2.8.8'
}
3.png

那么使用compile是什么情況呢?我們會(huì)發(fā)現(xiàn)它其實(shí)已經(jīng)過時(shí)了,并且sync時(shí)直接會(huì)報(bào)錯(cuò),其實(shí)它的作用和api是一致的,可以說api關(guān)鍵字就是用來替代compile關(guān)鍵字的,所以我們現(xiàn)在使用api即可

dependencies {
    XXXXX
    compile 'com.google.code.gson:gson:2.8.8'
}
compile is deprecated; replace with either api to maintain current behavior, or implementation to improve build performance by not sharing this dependency transitively.
總結(jié)
同一個(gè)Module中

compile(過時(shí))、api、implementation的使用效果相同

不同的Module中

compile(過時(shí))、api關(guān)鍵字引入的包對于其他Module來說是可見的,而implementation關(guān)鍵字引入的包對于其他Module來說是不可見的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容