pandora icon indicating copy to clipboard operation
pandora copied to clipboard

版本说明和依赖冲突的解决方案

Open whataa opened this issue 5 years ago • 4 comments

版本说明

androidx是Android官方推出的用于取代 android-support 的依赖库,相对support包,除了包名不同,其余完全一致。目前有些项目已经迁移到了x,但是也有部分项目由于历史原因无法适配,因此为防止引入Pandora导致重复依赖,提供了以下两种版本:

  • AndroidX
implementation 'com.github.whataa:pandora:androidx_v${RELEASE}'
  • Support
implementation 'com.github.whataa:pandora:v${RELEASE}'

具体区别就是版本号前面是否包含 androix_ 前缀。对于 no-op,由于没有引入对于的依赖库,因此不用区分。

依赖问题

1. support冲突

Pandora使用的findViewById 方法为 非强转类型 版本,需要compile-sdk至少为 26,所以对应的support-lib也需要至少为26.1.0

同时为了保持和官方版本同步,Pandora目前的compileSDK为 28,support版本为28.0.0,support包包含以下三种:

appcompat-v7
recyclerview-v7
design

部分项目可能与此配置不一致导致 gradle sync 失败,又由于一些原因无法修改自身的配置,因此你可以按以下来修改对Pandora的依赖方式:

compileSdkVersion 26

implementation ("com.github.whataa:pandora:v2.0.3") {
    exclude group: 'com.android.support'
}
implementation "com.android.support:appcompat-v7:26.1.0"
implementation "com.android.support:recyclerview-v7:26.1.0"
implementation "com.android.support:design:26.1.0"

当然如果你引入了其它依赖库也间接依赖了不同版本的support包,你也需要自行 exclude 进行排除防止冲突。

2. OKHttp依赖更新说明

Pandora依赖的OKHttp版本为 3.14.0,如果和项目产生依赖冲突,你可以按照以上方案进行重新指定版本:

implementation ("com.github.whataa:pandora:v2.1.0") {
    exclude group: 'com.squareup.okhttp3'
}

whataa avatar May 16 '19 03:05 whataa

项目更新了OkHttp 4.0.1 exclude group: 'com.squareup.okhttp3'后还是报错

java.lang.NoSuchMethodError: No static method get(Lokhttp3/Response;)Lokhttp3/internal/http/StatusLine; in class Lokhttp3/internal/http/StatusLine; or its super classes (declaration of 'okhttp3.internal.http.StatusLine' appears in /data/app/com.tapplock.en.pad.debug-2/base.apk:classes3.dex)
at tech.linjiang.pandora.network.okhttp3.internal.huc.OkHttpURLConnection.getHeaderFields(OkHttpURLConnection.java:227)
at tech.linjiang.pandora.network.okhttp3.internal.huc.DelegatingHttpsURLConnection.getHeaderFields(DelegatingHttpsURLConnection.java:184)
at tech.linjiang.pandora.network.okhttp3.internal.huc.OkHttpsURLConnection.getHeaderFields(OkHttpsURLConnection.java:27)
at hh.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (040406-248795830):27)
at gx.b(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (040406-248795830):2)
at gy.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (040406-248795830):3)
at ha.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (040406-248795830):14)
at com.google.maps.api.android.lib6.drd.ak.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (040406-248795830):6)
at gc.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (040406-248795830):22)
at gc.run(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (040406-248795830):8)

ggggxiaolong avatar Jul 19 '19 09:07 ggggxiaolong

我看了下,OKHttp4.x开始已经用kotlin重写了,上面涉及到的方法调用方式已经改变,需要改下Pandora代码,所以无法简单的通过exclude来解决。但是考虑到不同项目依赖的OKHttp版本不一样,从兼容性方面来说,我还没找到一个好的解决方案

whataa avatar Jul 21 '19 04:07 whataa

可以增加一个新的分支吗?pull request

ggggxiaolong avatar Jul 23 '19 01:07 ggggxiaolong

我看了下,OKHttp4.x开始已经用kotlin重写了,上面涉及到的方法调用方式已经改变,需要改下Pandora代码,所以无法简单的通过exclude来解决。但是考虑到不同项目依赖的OKHttp版本不一样,从兼容性方面来说,我还没找到一个好的解决方案

@whataa 请问怎么解决

LikeDege avatar Mar 21 '23 06:03 LikeDege