2017-04-19 80 views
1

我用来接收DexIndexOverflowException几天以前,我所做的是:启用Multidex

一)在我build.gradle文件中添加multiDexEnabled true到defaultConfig。

b)在依赖项部分添加compile 'com.android.support:multidex:1.0.1'

之后,一切都再次运行OK。

今天,我读的d.android.com网站用户指南(链接here)和它说,我也应该覆盖MultiDexApplication类(因为我已经从Application延伸)。

我的问题是:因为我没有延伸MultiDexApplication通过只做上面提到的两件事情,我怎么可能不接受我以前收到的例外?我现在该怎么办?即使现在一切正常,我是否应该尝试并延长MultiDexApplication

+0

您是否使用pre lolipop设备测试了您的应用程序? –

+0

是的,我做了,它的工作没有任何问题 – Mes

+0

可能是你没有超过65536方法dex检查也doc:http://stackoverflow.com/documentation/android/1887/multidex-and-the-dex-method-限制/ 6155 /使能multidex#吨= 20170420104458307849 –

回答

1

你的代码必须接近方法的数量限制,我建议使整个实现。否则,您可以查看您的依赖关系,并删除那些未使用的并使用ProGuard。良好的实践是有益的,如果可能的话更喜欢使用方法private

您有一些使用MultiDex的可能性。

最小的支持MultiDex的应用程序。要使用传统multidex 库,有3种可能性:

  • 将此类声明为AndroidManifest.xml中的应用程序。
  • 让您的应用程序扩展这个类。
  • 让您的应用程序重写attachBaseContext以protected void attachBaseContext(Context base)开始{super.attachBaseContext(base); MultiDex.install(本);

最后一个应该适合你。

+1

所以你能解释为什么它没有任何这些为他工作? –

+2

我假设最终的dex没有超过65536或他只考虑即时运行构建。要验证这一点:首先确保您正在编译最终APK。在构建最终APK后,在Android Studio中进入菜单Build \ Analyze APK,选择它。然后检查是否只有文件'classes.dex'(不是'classes2.dex'),所以选择这个.dex文件。并查看其上存在的引用方法的数量。 – betorcs