Android工程方法数超过65535的解决办法

  • Error:Execution failed for task ':ttt:transformClassesWithDexForDebug'.
    com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

    很不幸,今天被我遇到了,集成了一个Udesk客服功能,导入它的moudle,里面乱七八糟导入了一大堆第三方。作为一个第三方客服,你这样真的好么?

解决方案

  1. Gradle 配置:app的build.gradle中

      android {  
          defaultConfig {  
          applicationId "com.xxx.xxx"  
          minSdkVersion 14  
          targetSdkVersion 21  
    
          multiDexEnabled true  //加上这句话 
          }  
      }
  2. Gradle 配置:app的build.gradle中

      dependencies {  
          compile 'com.android.support:multidex:1.0.1'  
      }
  3. 自己的Application 类重写方法:

      @Override                           
      protected void attachBaseContext(Context base) {  
          super.attachBaseContext(base);  
          MultiDex.install(this);  
      }

    也可以继承android.support.multidex.MultiDexApplication类,不用重写上面方法

  4. 如果你的应用中包含引用的lirary工程或moudle,需要将预编译设置为false:

     android {  
          // ...  
          dexOptions {  
              preDexLibraries = false  
          }  
     }
  5. 当运行时如果看到如下错误:

    UNEXPECTED TOP-LEVEL ERROR:
    java.lang.OutOfMemoryError: Java heap space

    在dexOptions中有一个字段用来增加java堆内存大小:

      android {  
          // ...  
          dexOptions {  
              javaMaxHeapSize "2g"  
          }  
      }
原文地址:https://www.cnblogs.com/dongweiq/p/7115972.html