Sinch在部分Android设备启动时崩溃问题排查求助
先看你提供的崩溃日志核心信息:
04-13 09:22:20.765 27856-27856/? A/art: art/runtime/thread.cc:1336] No pending exception expected: java.lang.ClassNotFoundException: Didn't find class "com.sinch.android.rtc.internal.natives.HttpRequest" on path: DexPathList[[zip file "/system/framework/com.google.android.maps.jar", zip file "/data/app/com.test-1/base.apk"],nativeLibraryDirectories= [/data/app/com.test-1/lib/arm, /data/app/com.test- ...
这个问题本质是Dalvik/ART虚拟机在应用的Dex路径里找不到Sinch SDK内部的HttpRequest类,下面是几个针对性的排查和修复方案:
开启并配置MultiDex
如果你的应用方法数超过了65536(Dex方法数上限),部分低版本Android设备(5.0以下)默认不支持多Dex加载,会导致部分类无法被找到。- 在app模块的build.gradle里开启multidex:
android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' // 或使用support库对应的multidex依赖 } - 自定义Application类继承
MultiDexApplication,或者在现有Application的attachBaseContext方法里添加:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
- 在app模块的build.gradle里开启multidex:
确认Sinch SDK依赖完整性
检查你是否正确引入了完整的Sinch SDK:- 如果是通过Gradle依赖,确保依赖的SDK版本包含所有必要模块,比如:
implementation 'com.sinch.android.sdk:sinch-android-rtc:4.1.0' // 替换为你实际使用的版本 - 如果是手动导入SDK的jar/aar文件,确认没有遗漏包含
com.sinch.android.rtc.internal.natives包的模块,所有相关文件都已添加到项目的libs目录并正确引用。
- 如果是通过Gradle依赖,确保依赖的SDK版本包含所有必要模块,比如:
检查设备架构兼容性
崩溃设备的CPU架构(比如armeabi-v7a、arm64-v8a)可能和你应用打包时指定的架构不匹配,导致Sinch的native库无法加载,进而影响依赖类的初始化。
在app的build.gradle里指定支持的架构,确保覆盖崩溃设备的架构:android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } }同时确认Sinch SDK提供了你指定架构的native库。
修复ProGuard/R8混淆问题
如果开启了代码混淆,ProGuard/R8可能会误移除Sinch的内部类。在proguard-rules.pro里添加保护规则:-keep class com.sinch.android.rtc.** { *; } -keep class com.sinch.android.rtc.internal.natives.** { *; }防止这些类被混淆或移除。
清理项目缓存并重建
有时候是编译缓存导致的类加载异常,执行以下操作:- Android Studio菜单选择
Build > Clean Project - 再选择
Build > Rebuild Project - 或者手动删除项目根目录下的
build文件夹和app/build文件夹,重新编译。
- Android Studio菜单选择
内容的提问来源于stack exchange,提问作者Berhanwar




