解决Android 5.0以下环信初始化失败及65536限制的问题。

之前用环信写过包含即时通讯功能的APP,可是没有出现过在Android 5.0以下初始化失败的情况,而且使用的都是环信3.X的SDK。

先来看一下我遇到的错误

java.lang.NoClassDefFoundError: com/superrtc/call/AudioTrack
java.lang.ClassNotFoundException: Didn't find class "com.superrtc.call.AudioTrack" on path: /data/app/com.XXX.XXX.apk
解决Android 5.0以下环信初始化失败及65536限制的问题。_第1张图片
异常图01
解决Android 5.0以下环信初始化失败及65536限制的问题。_第2张图片
异常图02
异常图03

下面分享一下我解决问题的心路历程,想看解决方法的直接跳到文章结尾就好了。

问题大概都是提示ClassNotFound之类的问题,最开始我以为是.so文件与极光的SDK发生了冲突,于是我copy了一份代码出来,移除了极光之后还会出现这种问题。

随后有重新配置了以下混淆的proguard配置文件,问题依旧。

后来我查看了一下提示出来的类,上面都有注释@TargetApi(21),于是我百度了一下环信5.0以下初始化失败,有几位博主给出了同样的结局方案就是在Application的onCreate方法中super.OnCreate();方法前加一句话MultiDex.install(this);就可以了,但是都没有给出具体的原因。确实在Android 5.0以下的环境可以启动App了,但是问题又出现了,在Android 5.0以上的手机中出现了下面的问题

Error:(10, 32) 错误: 程序包android.support.multidex不存在

重点,下面才是完整的解决方法!!!

  实际上这个问题是因为Android工程方法数量超过了65536的限制
  下面给出解决方法:   
  Step1:
    在gradle的配置文件中添加依赖 compile 'com.android.support:multidex:1.0.1'
  Step2:
    添加 multiDexEnabled true
    android {
      ...
      defaultConfig {
         ...
         multiDexEnabled true
         ...
       }
     }
  Step3:
    在工程的MainApplication中重写  attachBaseContext() 方法
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }





你可能感兴趣的:(解决Android 5.0以下环信初始化失败及65536限制的问题。)