项目推送要换成极光推送,接入之后就说方法超过了64k,虽然去除之前不必要的依赖可能会解决问题,
但既然出现了,就解决一下,多了解点东西。于是乎,就开始了。
1.添加依赖于你的build.gradle支持MultiDex库
compile 'org.robolectric:shadows-multidex:3.3.2'
2.开启multiDexEnabled
在defaultConfig{...}中添加
multiDexEnabled true
然后我以为就这样就可以了,于是就开始尝试运行。但是问题出现了,在 4.x 的测试机上运行后会提示标
题中的错误,就是类找不到;但是在自己6.0的手机上运行就可以。进一步测试,发现测试机上将混淆开启
后也可以正常运行。刚开始还以为是我混淆配置文件的问题,后来想想也不对,不然不会只在6.0的手机上
可以运行。于是直接搜索错误,看到了有说dex分包的问题,试过后才知道错误的真正原因。
原来以前只知道方法超过64k要分包,要添加依赖,但不知道还要有其他配置。参考如下:
这里再复制一下,方便查看:
1.如果项目中没有创建自己的Application 类,可以在清单文件AndroidManifest.xml中配置
android.support.multidex.MultiDexApplication 就可以了。
android:name="android.support.multidex.MultiDexApplication"
2.如果项目中有自己的Application类了,可以让它继承 android.support.multidex.MultiDexApplication。
或者继承Application 类。在 attachBaseContext()/onCreate() 中添加
MultiDex.install(this);
如:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
这样,在 4.x 的机器上就可以正常运行了。
至于为什么在6.0的手机上可以正常运行,可能是因为 Android 5.0 以后的atr虚拟机和 dalvik 虚拟机的模
式不一样的原因吧;而为什么在 4.x 的手机上开启混淆就可以正常运行,这个原因还是不清楚。希望知道
原因的大神指导我一下,谢谢!