java.lang.ClassNotFoundException:DexPathList[[zip file "XX,nativeLibraryDirectories=[/data/app-lib
阿新 • • 發佈:2019-01-22
一、話不多說,直接貼貼出程式碼**
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的朋友,找到這個方法實現一下就可以了