公司项目几年前已经转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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐