Tinker使用时无法使用DefaultLifeCycle注解

最近学了android热修复,在使用时遇到了许许多多的坑,在导入其依赖时

    //生成appilcation时使用(只在编译时使用,打包不起作用)
    provided('com.tencent.tinker:tinker-android-anno:1.9.1')
    //thinker的核心sdk库
    implementation('com.tencent.tinker:tinker-android-lib:1.9.1')

但在最新版AndroidStudio时会提示provider过时

Tinker使用时无法使用DefaultLifeCycle注解_第1张图片

我就有一种冲动替换成最新的

Tinker使用时无法使用DefaultLifeCycle注解_第2张图片

什么,居然还有一片黄,再使用Alt+Enter换

Tinker使用时无法使用DefaultLifeCycle注解_第3张图片

替换好之后也不会报错,但是你在写ApplicationLike这个类的时候需要使用DefaultLifeCycle注解来将ApplicationLike对象装换成Application对象,但无论如何都找不到这个注解,后来还是看了看官方文档:tinker官方文档

Tinker使用时无法使用DefaultLifeCycle注解_第4张图片

一打开全tmd英文,脑袋大啊,但是还是看下去了,大家看英文文档还是要有耐心,如上图Use thinker-android-anno to generate your Application is recommended,翻译一下就是建议我们使用这个库生成我们的Application,原来就是我们使用thinker-android-anno这个库中出了问题,后来就按着官方文档又换回provider这就成功了。

当时我们要知其所以然,annotationProcessor只在编译的时候执行依赖的库,但是库最终不打包到apk中,简单的说,就是利用编译库达成目的,目的达成就把它抛弃了,我们要的仅仅是编译库的成果。差不多就是这个意思,概念到位即可。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,肯定就要崩溃了。总之Provided是间接的使用了依赖的Library,运行的时候必须使这个Library的存在,否则就会出错,避免依赖重复资源。

后来我查了一下,大家看一下这个新旧关系的替换表

Tinker使用时无法使用DefaultLifeCycle注解_第5张图片

图片转载地址:https://blog.csdn.net/u013795543/article/details/82227308

你可能感兴趣的:(android)