IM 即时通讯 (442)
Android (209)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (16)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (34)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (43)
iOS (168)
- SDK 导入 (10)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (26)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (4)
- 音视频 (3)
- 其他 (22)
Web (36)
Server (29)
调用connect方法不回调
在7.0以上的手机上,调用connect方法不回调。SDK 版本 大于等于 2.9.19 默认添加 libsqlite.so 。
发布时间: 2018-03-16 11:20
回答:
在7.0以上的手机上,调用connect方法不回调的问题:
从 Android 7.0 开始,系统将阻止应用动态链接非公开NDK 库,这种库可能会导致您的应用崩溃。
为帮助您识别加载私有库的问题,logcat 可能会生成一个警告或运行时错误。例如,如果您的应用面向 API 级别23 或更低级别,并在运行 Android 7.0 的设备上尝试访问私有库,您可能会看到一个类似于下面所示的警告:
03-21 17:07:51.502 31234 31234 W linker : library "libsqlite.so" ("/system/lib/libandroid_runtime.so") needed or dlopened by "/data/app/com.popular-app.android-2/lib/arm/libapplib.so" is not accessible for the namespace "classloader-namespace" - the access is temporarily granted as a workaround for http://b/26394120
这些 logcat 警告通知您哪个库正在尝试访问私有平台API,但不会导致您的应用崩溃。但是,如果应用面向 API级别24 或更高级别,logcat 会生成以下运行时错误,您的应用可能会崩溃:
java.lang.UnsatisfiedLinkError: dlopen failed: library "libsqlite.so" ("/system/lib/libcutils.so") needed or dlopened by "/system/lib/libnativeloader.so" is not accessible for the namespace "classloader-namespace" at java.lang.Runtime.loadLibrary0(Runtime.java:977) at java.lang.System.loadLibrary(System.java:1602)
如果您的应用使用动态链接到私有平台 API 的第三方库,您可能也会看到上述 logcat 输出。
原因是7.0以后,Andorid不允许直接访问系统的私有so文件了。
两种解决方案:
(1)把targetSdkVersion改小于24。
(2)apk中带上需要的so文件,这儿是libsqlite.so
(3)升级 SDK 版本,SDK 版本 大于等于 2.9.19 默认添加 libsqlite.so 。
下载附件中的so文件,放到对应的文件夹下,如libs/armv7-abi/libsqlite.so,并注意你的gradle是否引用了这个目录,如 jniLibs.srcDirs = ['libs']
编译测试。
通过Android Studio的Analyze APK功能[Build -> Analyze APK...], 或直接解开apk包,查看是apk的lib目录下是否已包含libsqlite.so文件。
libsqlite.so的下载链接:
http://support.rongcloud.cn/kb/NTQw