一、话不多说,直接贴贴出代码**
java.lang.RuntimeException: Unable to get provider com.qiyukf.nim.uikit.provider.UnicornProvider: java.lang.ClassNotFoundException: Didn't find class "com.qiyukf.nim.uikit.provider.UnicornProvider" on path: DexPathList[[zip file "/data/app/vestmentadviser-1.apk"],nativeLibraryDirectories=[/data/app-lib/vestmentadviser-1, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:4795)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4387)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4327)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.qiyukf.nim.uikit.provider.UnicornProvider" on path: DexPathList[[zip file "/data/app/vestmentadviser-1.apk"],nativeLibraryDirectories=[/data/app-lib/vestmentadviser-1, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
at android.app.ActivityThread.installProvider(ActivityThread.java:4780)
在测试的时候发现,debug版本出问题,正式版签名的没有问题,这个是debug出来的错误,而且还不是每个手机都出来,只是个别的,由于测试机资源有限,这个bug就搁置了,今天闲了,就把这个问题解决了!
翻译的意思是找个这个类,这个是七鱼的sdk我又重新看了七鱼的文档,没有一点错,给他们技术说,他们技术也没有说出来具体的解决方法,只能靠我了!
二、下面来说解决方法
我们来分析一下,为啥debug会出现问题,release会出现问题,看了gradle文件发现,debug没有被混肴,release混淆了!
还有部分手机提示没有七鱼sdk没有被初始化,明明初始化了,为啥会提示这个呢!让我想起MultiDex,我再看看,我的配置文件,MultiDex也添加了啊,最后发现sdk有点多啊,MultiDex得提前初始化放到onCreate根本不行,最后想到了一个attachBaseContext()方法,把MultiDex初始化放在这个方法,bug完美解决!
为了方便我再说一下MultiDex的配置
1、Gradle配置
// 多dex配置
implementation 'com.android.support:multidex:1.0.3'
defaultConfig {
//方法数超限时分割dex
multiDexEnabled true
}
2、在应用的Application 类重写方法:
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
//讲Multidex注入项目中
MultiDex.install(this)
}
代码我用的是kotlin,java的朋友,找到这个方法实现一下就可以了