使用Androidx的项目依赖使用support包的三方库为啥不报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Androidx的项目依赖使用support包的三方库为啥不报错相关的知识,希望对你有一定的参考价值。

参考技术A

之前在使用support包的android项目中引用了使用androidx的三方库,会报异常。比如下面的glide。

其中glide在4.10.0开始使用了androidx。编译这个项目会报异常:

为什么要说这个呢?
因为有了上面的经验我就以为: 使用了Androidx的项目再依赖使用support包的三方库也会不兼容 其实并不会。
还是刚才的项目,只是将项目改为AndroidX的了,glide使用了4.8.0版本。

编译直接就过了。

我随机找了下4.8.0的glide些源码

可以看到,里面确实使用的是support的库。然后我将当前项目打成apk包,并反编译,看下最终glide使用的到底是support还是androidx的依赖。

看上面反编译的截图,ArrayMap这个已经被从android.support版本替换成adnroidx的了。

当androidx的项目中依赖了使用基于support的三方库,在编译后系统会将他替换成对应的androidx的依赖。所以不会存在兼容问题。反之,如果基于support的项目依赖了基于androidx的三方库,怎编译会报不能兼容的错误。

如果谁知道这个替换的流程,希望可以跟我分享下。

以上是关于使用Androidx的项目依赖使用support包的三方库为啥不报错的主要内容,如果未能解决你的问题,请参考以下文章

Android源码中com.android.support依赖迁移到AndroidX库

项目使用了androidx,但gradle引入的第三方库使用的是android.support,但是为啥运行却没有任何问题

Unity-Android(安卓)支持androidx(兼容andoridx)

程序包androidx.support.annotation不存在/import android.support.annotation.NonNull;报错

AndroidX迁移-androidx.legacy:legacy-support-v4或androidx.appcompat:appcompat

程序包androidx.support.annotation不存在/import androidx.v7.app.AppCompatActivity;报错