Duplicate class error,Android support和Androidx库共存的问题
这两天正好遇到这样一个问题,公司项目在引入新的aar库时出现了下面这个错误。除此之外还有一个AndroidManifest.xml文件merge error。
1 | Duplicate class android.support.v4.app.INotificationSideChannel$Stub found in modules classes.jar |
在网上查了下资料,大概了解是因为新引入的包使用的android.support包,而我们的项目工程已经整体迁移到androidx,这两个库在功能上是重叠的,所以导致了上述的报错。
针对这种情况android官方提供了一种方式。在项目根目录下的gradle.properties文件中加入这两行。
1 | android.useAndroidX=true//是否使用androidx |
加入这两行后可以解决大部分上述问题。
但是公司项目在此次引入库(称做B.aar,B.aar使用了普通的android.support)之前是将”android.enableJetifier”开关注释了,原因是项目中原本使用的一个第三方库,这个库对android.support库做了定制(称做A.aar,A.aar使用了自己定制的android.support)。如果使用了“android.enableJetifier”开关,会改变所有“android.support.XX”包名为”androidx.XX”,这会导致A.aar的功能不可用。
由此出现一种局面就是:1.如果我们将“android.enableJetifier”置为true会因为改变了定制过的android.support库而使A.aar不可用;2.如果我们将“android.enableJetifier”置为false会因为项目项目本身使用的androidX和B.aar当中的普通android.support产生support库的冲突。
我们希望能够将B.aar当中的普通android.support强制转换为androidx,却又不想A.aar当中的定制android.support库被强转为androidx,经过多方了解和尝试我们找到Android官网没有写明的一个配置项,可以忽略某个包下面的强转,如下所示:
1 | android.useAndroidX=true//是否使用androidx |
这样就完美解决了这个问题。