深入理解编译注解(三)依赖关系 apt/annotationProcessor与Prov
前言网上有很多朋友在问: apt/annotationProcessor与Provided 都是只编译并不打入apk中,他俩到底有什么区别呢?所以我就把自己所了解的与大家分享一下。 正文编译关系 apt/annotationProcessor只在编译的时候执行依赖的库,但是库最终不打包到apk中,从之前的demo来看,总结一下:
例如demo中,app与io-compiler是编译关系,app在运行时需要io-compiler编译生成的MainActivity$$ViewInject文件,跟io-compiler无关。 让我们来做一个比喻:
简单的说,就是利用编译库达成目的,目的达成就把它抛弃了,我们要的仅仅是编译库的成果。差不多就是这个意思,概念到位即可。 ProvidedProvided 虽然也是编译时执行,最终不会打包到apk中,但是跟apt/annotationProcessor有着根本的不同。 一般应用场景是这样的:
A这个Library实际上还是要用到C的,只不过它知道B那里也有一个C,自己再带一个就显得多余了,等app开始运行的时候,A就可以通过B得到C,也就是两人公用这个C。所以自己就在和B汇合之前,假设自己有C。如果运行的时候没有C,肯定就要崩溃了。 再来做一个比喻:
差不多就是这个意思,比喻如果有小问题不要在意,关键是意会,你懂得。 总结一下,Provided是间接的得到了依赖的Library,运行的时候必须要保证这个Library的存在,否则就会崩溃,起到了避免依赖重复资源的作用。 总结到这里就结束了,不知道大家有没有对他们的区别有了更深的体会,如果有什么问题就留言,我们再好好的讨论。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |