日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

api与implementation的区别

發布時間:2024/1/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 api与implementation的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、從3.4版本的gradle開始,compile已經被api與implementation取代,官網也給出了三者之間的區別:

圖1、api與implementation的區別

從官網介紹可以看出,implementation可以讓module在編譯時隱藏自己使用的依賴,但是在運行時這個依賴對所有模塊是可見的。而api與compile一樣,無法隱藏自己使用的依賴。 具體通過例子來看,下圖為項目結構:

項目結構圖

app依賴模塊mylibrary1、mylibrary1依賴模塊mylibrary3 mylibrary1如下: package com.example.mylibrary1; /**

  • @author heshufan
  • @date 2018/8/9. */ public class MyClass1 { public static String get(){ return "MyClass1"; } } mylibrary3如下:

package com.example.mylibrary3; /**

  • @author heshufan
  • @date 2018/8/13. */ public class MyClass3 { public static String get(){ return "MyClass33"; } } 當mylibrary1 使用api依賴mylibrary3時,

api project(':mylibrary3') 在App中可以直接調用MyClass3類,也就是依賴可以傳遞。

package com.example.heshufan.learnapiandimp; import com.example.mylibrary1.MyClass1; import com.example.mylibrary3.MyClass3; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyClass1.get0(); MyClass3.get(); } } 當mylibrary1使用implemention依賴mylibrary3時,

implementation project(':mylibrary3') 在App中,無法直接調用mylibrary3

無法直接調用MyClass3

從上面的例子可以看出,在多module中,implementation確實可以起到隱藏依賴的作用,網上很多的文章都只講到了這點,那么這樣做的目的是什么呢?其實這并不是Google設計implemention與api的目的,因為官方文檔中說這樣設計的目的在于減少build的時間,那么implemention是如何減少build time的呢?

二、我們再新建一個module:mylibrary4,現在的項目結構如圖:

項目結構圖

那么現在的項目層級如下圖所示:

項目依賴層級圖

1、如果mylibrary3使用api依賴mylibrary4,那么當mylibrary4發生變化時,編譯需要重新編譯mylibrary4、mylibrary3、mylibrary1; 2、如果mylibrary3使用implemention依賴mylibrary4,那么當mylibrary4發生變化時,編譯需要重新編譯mylibrary4、mylibrary3,這個時候不需要編譯mylibrary1,這樣就可以節約build time; 為此我驗證了兩種依賴下項目的build time,每次重新編譯前clean project,改變mylibrary4,然后rebuild project,再查看build time。

使用implemention的build time:

implementation

使用api的build time

1api.jpg

可以看到api的build time比implemention多了1秒多,多次運行都多了1秒多,這還是在module比較小的情況下。如果包比較多,比較大,那么可以節約的時間是非常可觀的。 總結起來:如果api依賴,一個module發生變化,這條依賴鏈上所有的module都需要重新編譯;而implemention,只有直接依賴這個module需要重新編譯。 三、現在在回過頭來看一下依賴傳遞的問題,之前驗證了使用implemention,app不能拿到MyClass3,這是在本地依賴的情況下,而現在的模塊化開發多采用遠程依賴的模式進行合作。那么如果采用maven遠程依賴呢? 同樣采用之前的例子,我們新建一個module :mylibrary2

mylibrary2

我們將其上傳到我們的本地maven

maven倉庫

最后在mylibrary1中利用implemention依賴mylibrary2 //mylibrary1 implementation 'com.example:mylib:1.0.3' 然后我們再將mylibrary1上傳到本地maven,然后在app中遠程依賴mylibrary1

//mylibrary2 implementation 'com.example:myClass2:1.0.0' 復制代碼

也就是app遠程implementation mylibrary1,mylibrary1遠程implemention mylibrary2,這時候app就可以直接拉到mylibrary2中的myClass2類(命名不規范,別學我)

沒有報錯 而如果app本地implementation mylibrary1,mylibrary1遠程implemention mylibrary2,這時候app則不能獲取到mylibrary2中的myClass2類,依然起到了依賴隔離的作用。

由以上可以看到在全部遠程依賴模式下,無論是api還是implemention都起不到依賴隔離的作用。不過,在遠程依賴模式下,依賴的一個模塊如果版本發生變化,implemention與api的構建速度誰快誰慢還需要進一步研究。

綜上,在多層次模塊化(大于等于三層module)開發時,如果都是本地依賴,implementation相比api,主要優勢在于減少build time。如果只有兩層module,api與implemention在build time上并無太大的差別。

參考資料: 1、jeroenmols.com/blog/2017/0… 2、www.jianshu.com/p/dd932f951…

作者:一杉先生 鏈接:www.jianshu.com/p/8962d6ba9… 來源:簡書 簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

總結

以上是生活随笔為你收集整理的api与implementation的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 叼嘿视频在线免费观看 | 中文字幕无码精品亚洲 | 久久久精品一区二区 | 成年网站| 宅男噜噜噜 | 泽村玲子av | 黄色在线小视频 | 久草国产在线观看 | 中文天堂在线视频 | 亚洲熟妇丰满大屁股熟妇 | 成人免费观看视频网站 | 69看片 | 黄网站在线观看视频 | 黄色片子一级 | 91婷婷在线| 羞辱狗奴的句子有哪些 | 波多野结衣电影免费观看 | 欧美中文字幕一区二区三区 | 人妻熟女一区 | 草莓视频一区二区三区 | 亚洲精久 | 国产精品久久久久久白浆 | 伊人中文字幕在线观看 | 国产午夜福利一区二区 | 久久久久中文 | 97超碰人人干 | 做视频 | 亚洲一级片免费看 | 国产福利一区二区三区 | 亚洲欧洲精品一区二区三区 | 欧美一区二区三区在线看 | 少女忠诚电影高清免费 | 中文字幕第11页 | 日本久久久久久久久久久 | 黑名单上的人全集免费观看 | 人人妻人人澡人人爽人人欧美一区 | 日韩 欧美 亚洲 | 少妇被狂c下部羞羞漫画 | 91av久久| 激情五月色综合国产精品 | 婷婷综合影院 | 特级毛片在线观看 | 在线免费观看成人 | 修女也疯狂3免费观看完整版 | 毛片亚洲av无码精品国产午夜 | 一区二区三区国产视频 | 亚洲免费毛片 | 国产精品久久久国产盗摄 | 国产老头老太作爱视频 | www视频在线免费观看 | 一区二区乱子伦在线播放 | 黄色片免费在线 | www.日日操| 亚洲精品v天堂中文字幕 | 性感av在线 | 天堂视频中文在线 | 泰坦尼克号3小时49分的观看方法 | 性色欲情网站iwww九文堂 | 亚洲色图美腿丝袜 | 色婷婷色| 久久久亚洲精品无码 | 国产色综合视频 | 成人无码精品1区2区3区免费看 | 麻豆影视国产在线观看 | 一级片观看 | 91久久精品一区二区三区 | 久久综合av | 国产精品有限公司 | 在线观看成人免费视频 | 久久午夜精品视频 | 在线不卡欧美 | 国产精品无码免费在线观看 | 国产视频1区2区3区 国产欧美一区二区精品性色99 | 四虎精品在永久在线观看 | a∨鲁丝一区鲁丝二区鲁丝三区 | 欧美一区二区三区免费视频 | 久久色网站 | 精品久久久亚洲 | 在线 日本 制服 中文 欧美 | 中文人妻一区二区三区 | 亚洲日本视频在线观看 | 亚洲国产欧美一区二区三区深喉 | 欧美一级啪啪 | 婷婷激情在线 | 久久亚洲一区二区三区四区五区 | 好吊操av | 欧美性猛交xxxx| 日本免费电影一区二区三区 | 成人午夜视频免费在线观看 | 日韩色网站| 精品视频一区二区三区在线观看 | 99免费在线观看视频 | 精品一区在线播放 | 欧美永久| 俺也来俺也去俺也射 | 综合 欧美 亚洲日本 | 99热这里是精品 | 老王66福利网 | 成人中文字幕在线观看 |