公司项目几年前已经转Androidx了,但是开发SDK给第三方使用时,第三方还是在Android上做开发,所以我就研究了下在Android工程上能否依赖Androidx的包,先说结论:不能。
网上很多资料感觉都是抄来抄去,我不知道抄过去的作者这么做有什么意义,自己是不是压根就没试验,那些互相抄的解决办法根本就没用,所以我自己一步一步摸索,最后总结以下五步,可以成功让你的Android工程集成androidx的依赖库并运行起来,但是你的APP会闪退,也就是说,你即使成功依赖上了androidx的库,也不能正常使用。
1、将编译 SDK 设置为 Android 9.0(API 级别 28)或更高版本。
2、在你的工程gradle.properties中添加
#是否使用androidx
android.useAndroidX=true
不要添加 android.enableJetifier=true 属性,否则你Android工程的support包都会找不到。
3、同步、编译、运行,会出现如下报错:
对依赖的androidx的包进行exclude操作,如:
api ("com.xxxx.xxxx:third:x.x.x") {
exclude module: 'core'
exclude module: 'support-v4'
}
exclude内容根据你报错内容中冲突的模块自行添加。
4、同步、编译、运行,会出现如下报错:
在你工程的app模块下的build.gradle中,android标签下添加
packagingOptions {
exclude 'META-INF/androidx.fragment_fragment.version'
}
其中exclude的内容是编译报错时More than one file was found with OS independent path后面的内容。
5、重复4的操作,直到不报错即可运行起来项目。
编译运行错误都解决了,项目跑起来了,但是会闪退,因为你exclude了东西,自然就缺少了功能,所以Android工程无法依赖androidx的库。
参考:
AndroidX 概览 | Android 开发者 | Android Developers
android support包和 androidx 冲突解决方式:_衣我以夜的博客-CSDN博客_androidx兼容support