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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

深入理解编译注解(三)依赖关系 apt/annotationProcessor与Provided的区别

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解编译注解(三)依赖关系 apt/annotationProcessor与Provided的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

網上有很多朋友在問: apt/annotationProcessor與Provided 都是只編譯并不打入apk中,他倆到底有什么區別呢?所以我就把自己所了解的與大家分享一下。

正文

編譯關系 apt/annotationProcessor

只在編譯的時候執行依賴的庫,但是庫最終不打包到apk中,從之前的demo來看,總結一下:

編譯庫中的代碼沒有直接使用的意義,也沒有提供開放的api調用,最終的目的是得到編譯庫中生成的文件,供我們調用。

例如demo中,app與io-compiler是編譯關系,app在運行時需要io-compiler編譯生成的MainActivity$$ViewInject文件,跟io-compiler無關。

讓我們來做一個比喻:

演員表

小明:扮演app。
自動售賣機:扮演編譯庫。
營養快線:編譯庫生成的文件。

劇情:
小明站在自動售賣機前,對它說:感覺身體被掏空,趕緊給我來瓶營養快線!然后售賣機忽忽悠悠彈出一瓶營養快線,然后小明就走了。

簡單的說,就是利用編譯庫達成目的,目的達成就把它拋棄了,我們要的僅僅是編譯庫的成果。差不多就是這個意思,概念到位即可。

Provided

Provided 雖然也是編譯時執行,最終不會打包到apk中,但是跟apt/annotationProcessor有著根本的不同。

一般應用場景是這樣的:

A 、B、C都是Library。
A依賴了C,B也依賴了C
App需要同時使用A和B
那么其中A(或者B)可以修改與C的依賴關系為Provided

A這個Library實際上還是要用到C的,只不過它知道B那里也有一個C,自己再帶一個就顯得多余了,等app開始運行的時候,A就可以通過B得到C,也就是兩人公用這個C。所以自己就在和B匯合之前,假設自己有C。如果運行的時候沒有C,肯定就要崩潰了。

再來做一個比喻:

演員表
小明:扮演app
小剛:扮演Library(A)
小毛:扮演Library(B)

劇情:
春天到了小明寂寞難耐,給小剛和小毛打電話:今晚夜色撩人,我們去大保健吧,帶上你們的會員卡,我請客!
小剛:我有XXX的會員卡,會員通用,而且不是會員不讓進,十分安全,我和小毛帶一張就足夠了。
小毛:沒問題!你帶會員卡吧,我開車去接你倆。

結局1
小剛沒有忘記帶會員卡,一切順利。

結局2
小剛忘記帶會員卡,3個人因計劃泡湯掃興而歸。

差不多就是這個意思,比喻如果有小問題不要在意,關鍵是意會,你懂得。

總結一下,Provided是間接的得到了依賴的Library,運行的時候必須要保證這個Library的存在,否則就會崩潰,起到了避免依賴重復資源的作用。

總結

到這里就結束了,不知道大家有沒有對他們的區別有了更深的體會,如果有什么問題就留言,我們再好好的討論。

總結

以上是生活随笔為你收集整理的深入理解编译注解(三)依赖关系 apt/annotationProcessor与Provided的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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