Libsqlite.so 库冲突导致 App 出现崩溃、无法连接 IM,日志报错 ClassNotFoundException

描述

App 集成或升级融云 SDK 版本后出现崩溃、无法连接 IM。排查日志中出现 ClassNotFoundException 异常问题。

类如下堆栈,找不到 SQLiteCustomFunction 类:

[RongLog][ NativeObject ] load sqlite:Beginning load of sqlite...
Unable to find class org/sqlite/database/sqlite/SQLiteCustomFunction
JNI DETECTED ERROR IN APPLICATION: JNI GetFieldID called with pending exception java.lang.ClassNotFoundException: 
    Didn't find class "org.sqlite.database.sqlite.SQLiteCustomFunction" on path: DexPathList[[zip file "/data/app/***/base.apk"],nativeLibraryDirectories=[/data/app/***/lib/arm64, /data/app/***/base.apk!/lib/arm64-v8a, /system/lib64, /system/product/lib64]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:196)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class) (Runtime.java:-2)
at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:1115)
at void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.Class, java.lang.String) (Runtime.java:1069)
at void java.lang.Runtime.loadLibrary0(java.lang.Class, java.lang.String) (Runtime.java:1007)
at void java.lang.System.loadLibrary(java.lang.String) (System.java:1667)
at void io.rong.imlib.relinker.SystemLibraryLoader.loadLibrary(java.lang.String) (SystemLibraryLoader.java:24)
at void io.rong.imlib.relinker.ReLinkerInstance.loadLibraryInternal(android.content.Context, java.lang.String, java.lang.String) (ReLinkerInstance.java:158)
at void io.rong.imlib.relinker.ReLinkerInstance.loadLibrary(android.content.Context, java.lang.String, java.lang.String, io.rong.imlib.relinker.ReLinker$LoadListener) (ReLinkerInstance.java:132)
at void io.rong.imlib.relinker.ReLinkerInstance.loadLibrary(android.content.Context, java.lang.String) (ReLinkerInstance.java:88)
at void io.rong.imlib.NativeObject.<init>(android.content.Context, java.lang.String) (NativeObject.java:42)
at void io.rong.imlib.NativeClient.init(android.content.Context, java.lang.String, java.lang.String, io.rong.imlib.RCConfiguration, java.lang.String) (NativeClient.java:518)
at void io.rong.imlib.LibHandlerStub.<init>(android.content.Context, java.lang.String, java.lang.String, io.rong.imlib.RCConfiguration, java.lang.String, int) (LibHandlerStub.java:138)
at android.os.IBinder io.rong.imlib.ipc.RongService.onBind(android.content.Intent) (RongService.java:46)
at void android.app.ActivityThread.handleBindService(android.app.ActivityThread$BindServiceData) (ActivityThread.java:4430)
at void android.app.ActivityThread.access$1800(android.app.ActivityThread, android.app.ActivityThread$BindServiceData) (ActivityThread.java:266)
at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:2143)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:107)
at void android.os.Looper.loop() (Looper.java:230)
at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7987)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:526)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1034)
in call to GetFieldID
from java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class)

分析

一般是 SDK 中 libs 下的 libsqlite.so 库与本地项目中引用的 libsqlite.so 引起冲突。

解决方案

需要删除冲突的 libsqlite.so 库,以下方案二选一:

  • 删除项目中引用的 libsqlite.so
  • 如果无法删除项目中引用的 libsqlite.so,可以删除 SDK libs 目录下的 libsqlite.so 库

链接

如有需要,可使用该 libsqlite.so 文件。

追踪记录

  • 工单号:182552

更多支持

如有疑问,欢迎提交工单