You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Sinch在部分Android设备启动时崩溃问题排查求助

解决Android应用启动崩溃:ClassNotFoundException for com.sinch.android.rtc.internal.natives.HttpRequest

先看你提供的崩溃日志核心信息:

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加载,会导致部分类无法被找到。

    1. 在app模块的build.gradle里开启multidex:
      android {
          defaultConfig {
              multiDexEnabled true
          }
      }
      dependencies {
          implementation 'androidx.multidex:multidex:2.0.1' // 或使用support库对应的multidex依赖
      }
      
    2. 自定义Application类继承MultiDexApplication,或者在现有Application的attachBaseContext方法里添加:
      @Override
      protected void attachBaseContext(Context base) {
          super.attachBaseContext(base);
          MultiDex.install(this);
      }
      
  • 确认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目录并正确引用。
  • 检查设备架构兼容性
    崩溃设备的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.** { *; }
    

    防止这些类被混淆或移除。

  • 清理项目缓存并重建
    有时候是编译缓存导致的类加载异常,执行以下操作:

    1. Android Studio菜单选择Build > Clean Project
    2. 再选择Build > Rebuild Project
    3. 或者手动删除项目根目录下的build文件夹和app/build文件夹,重新编译。

内容的提问来源于stack exchange,提问作者Berhanwar

火山引擎 最新活动