您的位置:首页 > 移动开发 > Android开发

Android Studio 错误 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

2016-09-18 10:54 711 查看
第1步 

添加依赖于你的build.gradle支持MultiDex库

dependencies { ... compile 'com.android.support:multidex:1.0.1' ... }


第2步 

在buildType或productFlavor中开启multiDexEnabled。

defaultConfig { ... multiDexEnabled true ... }


现在,根据你的项目情况,你有3种选择:

如果你没有创建自己的Application 类,在你的清单文件AndroidManifest.xml中配置
android.support.multidex.MultiDexApplication
就可以了。

.... android:name="android.support.multidex.MultiDexApplication" ...


如果你有自己的Application类了,让它继承 
android.support.multidex.MultiDexApplication
而不是
android.app.Application


如果你的Application继承了其他的类,并且你不想改变或者没办法改变。按照下面的方法重写
attachBaseContext()


[java] view
plain copy

<span style="font-size:18px;color:#ff6666;"> @Override  

     protected void attachBaseContext(Context base) {  

         super.attachBaseContext(base);  

         MultiDex.install(this);  

     }</span>  

不论你选择上面哪种,都会创建多个大小差不多的dex文件代替单个庞大的dex文件。运行的时候回同事加载所有的这些dex文件。

当年编译app的时候,Gradle会生成很多个dex文件和一个apk文件让你可以在设备或者模拟器上运行。



你可以从这个项目看到上面的效果

如果出现了64k 限制 那么应该也会出现  Out of memory 问题 

对于有很多依赖的项目,编译可能因为下面的错误中断

Error:Execution failed for task ':app:dexDebug'. ... Error Code: 3 Output:
UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded at com.android.dx.cf.cst.ConstantPoolParser.parse0(ConstantPoolParser.java:326) ...


在build.gralde android标签下面添加下面代码可以解决

dexOptions { incremental true javaMaxHeapSize "4g" }

参考文章地址:文章地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: