1. 报错内容
报错如下:
Caused by: java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.10.1-runtime (androidx.core:core:1.10.1) and support-compat-28.0.0-runtime (com.android.support:support-compat:28.0.0)
报错环境:
- 使用了 ARouter 构建组件化项目
- 使用了 Dokit
implementation 'androidx.appcompat:appcompat:1.6.1'implementation 'com.google.android.material:material:1.9.0'implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
怀疑可能是二者内部依赖有冲突
2. Fix修复
在根目录的 gradle.properties
添加
android.enableJetifier=true
重新Build即可
3. android.enablejetifier=true是什么
3.1 简介
android.enablejetifier=true是一个新的构建选项,用于自动更新应用程序中使用的废弃Android支持库依赖项。
在构建Android应用程序时,为了使用最新的API和Bug修复,我们经常依赖于第三方库和支持库。在Android开发中,支持库是不可或缺的一部分。但是,由于废弃的支持库必须被替换为给定的AndroidX库,这可能会成为一个挑战。android.enablejetifier=true可以帮助我们解决这个问题。
3.2 android.enablejetifier=true是什么
android.enablejetifier=true是一个Gradle选项,用于自动更新应用程序中使用的依赖项所需的库(例如,废弃的Android支持库)适用于AndroidX库。
AndroidX是一个重构的支持库。它摆脱了一些历史包名和命名空间问题,并提供了新的库来支持最新的Android API。虽然所有现有的第三方库和支持库都需要更新才能与AndroidX兼容,但使用Jetifier(一种二进制文件转换工具)可以自动将现有支持库转换为AndroidX依赖项。
3.3 android.enablejetifier=true的作用
由于一些第三方库或依赖系统库仍然使用旧的Android支持库,它们可能无法与新的AndroidX库兼容。因此,当您升级到AndroidX时,Gradle可能会报告许多错误。这也许是因为有一些其他的库无法兼容AndroidX库。android.enablejetifier=true能够解决这个问题,因为它将旧支持库替换为新AndroidX库。
因此,当您升级到AndroidX并启用android.enablejetifier=true时,它将在构建过程中使用Jetifier运行,以确保app使用的所有依赖项都与AndroidX兼容。
使用android.enablejetifier=true,您可以实现以下两个功能:
将现有支持库转换为AndroidX库。
保持与现有支持库兼容,以确保您的应用程序仍然能够使用旧的支持库。
3.4 android.enablejetifier=true的优缺点
优点:
自动更新旧的支持库为AndroidX库。这样可以避免手动更新所有依赖项的繁琐过程。
保持与旧支持库的兼容性,以确保应用程序能够使用旧的支持库。
能够减少代码中需要更改的地方。如果所有依赖项都能自动更新为AndroidX库,就不需要对代码进行更改。
缺点:
需要更长的编译时间,因为Gradle编译器需要转换支持库到AndroidX库。
Jetifier无法更新某些依赖项,因此可能需要手动更新一些库以保持与AndroidX兼容。
3.5 结论
android.enablejetifier=true可以为您的应用程序提供更好的兼容性和体验,而无需手动更新所有旧的支持库。虽然它有一些缺点,但优点远高于缺点。如果您正在更新应用程序到AndroidX,我们强烈建议启用android.enablejetifier=true选项。
【参考文章】
- 理解android.enablejetifier=true