问题描述
我正在使用jitsi库进行视频连接。首次安装时,它工作正常,但如果用户已经拥有应用程序并从Play商店对其进行更新,则它会崩溃。崩溃日志显示:
没有静态方法delimiterOffset(Ljava / lang / String; IILjava / lang / String;)I in Lokhttp3 / internal / Util;或其上级类(“ okhttp3.internal.Util”的声明出现在base.apk!classes3.dex中)
有2个自动生成的文件:1)okhttp3.JavaNetCookieJar 2)okhttp3.internal.Util。
在类JavaNetCookieJar
中,此delimiterOffset(header,pos,limit,";,")
方法在Util
类中被调用。
Util
类的delimiterOffset()方法与以下方法不兼容:
delimiterOffset(delimiters: String,startIndex: Int = 0,endindex: Int = length)
delimiterOffset(delimiter: Char,endindex: Int = length)
当我将鼠标悬停在JavaNetCookieJar
类上时,它说它来自okhttp3-urlconnection-3.12.1
包,当我将鼠标悬停在Util
包上时,它说它来自okhttp-4.8.0
。我正在使用
implementation 'com.squareup.okhttp3:logging-interceptor:4.8.0'
有趣的是,甚至当我在gradle中删除okhttp3实现时,这2个文件也不受影响。
解决方法
您必须使用所有OkHttp依赖项的完全相同的版本。您可以手动配置,也可以使用BOM自动进行。
dependencies {
api(platform("com.squareup.okhttp3:okhttp-bom:4.8.0"))
api("com.squareup.okhttp3:okhttp") // No version!
api("com.squareup.okhttp3:logging-interceptor") // No version!
}
,
检查你的gradle是否有这一行:
configurations {
all*.exclude group: 'com.squareup.okio'
all*.exclude group: 'com.squareup.okhttp3'
}
如果是这样,只需将其删除或评论
configurations {
//all*.exclude group: 'com.squareup.okio'
//all*.exclude group: 'com.squareup.okhttp3'
}
现在清理并重建项目。