Libsqlite.so library conflict causes app crash and IM connection failure, log reports ClassNotFoundException

Description

After integrating or upgrading the RongCloud SDK, the app crashes and fails to connect to IM. The log shows a ClassNotFoundException exception.

The class SQLiteCustomFunction is missing, as shown in the stack trace below:


[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)

Analysis

This issue is usually caused by a conflict between the libsqlite.so library in the SDK’s libs directory and the libsqlite.so library referenced in your local project.

Solution

Delete the conflicting libsqlite.so library. Choose one of the following solutions:

  • Delete the libsqlite.so referenced in your project.

  • If you can’t delete the libsqlite.so in your project, delete the libsqlite.so in the SDK’s libs directory.

Link

If needed, you can use this libsqlite.so file.

More support

If you have any questions, feel free to submit a ticket.