发布网友 发布时间:2022-12-05 06:25
共1个回答
热心网友 时间:2024-04-24 11:21
广告模块引入了很多三方sdk,这里的问题体现在google的admob上,期望是将admob升级到18.3.0版本,结果主工程中由于引入了firebase,具体来讲就是admob和firebase都引入了google的基础服务gms,但版本没统一导致了Duplicate class的错误。
期望将admob升级到18.3.0版本
com.google.android.gms:play-services-ads:18.3.0 这个版本里面使用了
com.google.android.gms:play-services-measurement-base:17.1.0
我们项目中还使用了两个google的服务框架,分别如下(已是最高版本了):
com.google.android.gms:play-services-gcm:17.0.0
com.google.firebase:firebase-core:17.0.0
这两个包里面使用了com.google.android.gms:play-services-measurement-base:17.0.0,导致工程现在编译时报错:Duplicate class com.google.android.gms.internal.measurement.zzio found in modules classes.jar (com.google.android.gms:play-services-measurement-base:17.1.0) and classes.jar (com.google.android.gms:play-services-measurement:17.0.0)
解决方法:将admob18.3.0降到18.0.0,因为这个版本里面是play-services-measurement-base:17.0.0
上面已经定调了admob使用18.0.0,内部的play-services-measurement-base是17.0.0,更内部的firebase-iid是19.0.0。这个依赖是确定下来的了。
而在主工程中报错日志如下:
In project 'app' a resolved Google Play services library dependency depends on another at an exact version (e.g. "[17.0.4]", but isn't being resolved to that version. Behavior exhibited by the library will be unknown.
Dependency failing: com.google.firebase:firebase-messaging:17.3.4 -> com.google.firebase:firebase-iid@[17.0.4] , but firebase-iid version was 19.0.0.
日志中说的也很清楚了,要将firebase-iid 17.0.4 升级到 19.0.0。下面要解决的问题是将com.google.firebase:firebase-messaging:17.3.4这个升级到内部依赖了firebase-iid version19.0.0的版本,通过在 https://mvnrepository.com/ 上查询搜索关键词:firebase-messaging,定位到firebase-messaging:19.0.0内部依赖了firebase-iid version19.0.0,那么在主工程中将firebase-messaging升级到19.0.0就将问题解决了。
说实话,google下面的各类服务框架包纷繁复杂,版本又不统一,在同时引入多个google的服务框架时势必会遇到这种问题,那么后续解决该类问题的思路是怎样呢? 总的思路是:先定一个核心服务的目标版本,然后其他服务适配该核心服务版本。 比如确定了要将admob升级到18.3.0,那么非核心的服务就需要将其内部依赖的paly-service-base保持一致,基本上就不出现Duplicate class的问题。