After Update of as to 1.0, Getting "Method Id Not in [0, 0Xffff]: 65536" Error in Project

After update of AS to 1.0, getting method ID not in [0, 0xffff]: 65536 error in project

The error means you have reached maximum method count in your app. That does include any libraries that you use for your project.

There are two ways to tackle the issue:

  1. Get rid of any third-party libraries that you don't really need. If you use google play services that might contribute a lot to the method count. Fortunately as of the latest play-services release it is possible to include only parts of the framework.
  2. Use a multi dex setup for your application.

com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536 in android studio

Android has a pre-defined upper limit of Methods of 65536.

The most common cause of this is using the full google play services library, instead of just the subset you need, eg design, cardview, maps etc.

If this is not the case, then use the multidex library, which enables a bigger limit.
See here:
http://developer.android.com/tools/support-library/features.html#multidex

Basically just this in gradle:

com.android.support:multidex:1.0.0

Unable to execute dex: method ID not in [0, 0xffff]: 65536

Update 3 (11/3/2014)
Google finally released official description.


Update 2 (10/31/2014)
Gradle plugin v0.14.0 for Android adds support for multi-dex. To enable, you just have to declare it in build.gradle:

android {
defaultConfig {
...
multiDexEnabled true
}
}

If your application supports Android prior to 5.0 (that is, if your minSdkVersion is 20 or below) you also have to dynamically patch the application ClassLoader, so it will be able to load classes from secondary dexes. Fortunately, there's a library that does that for you. Add it to your app's dependencies:

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

You need to call the ClassLoader patch code as soon as possible. MultiDexApplication class's documentation suggests three ways to do that (pick one of them, one that's most convenient for you):

1 - Declare MultiDexApplication class as the application in your AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>

2 - Have your Application class extend MultiDexApplication class:

public class MyApplication extends MultiDexApplication { .. }

3 - Call MultiDex#install from your Application#attachBaseContext method:

public class MyApplication {
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
....
}
....
}

Update 1 (10/17/2014):
As anticipated, multidex support is shipped in revision 21 of Android Support Library. You can find the android-support-multidex.jar in /sdk/extras/android/support/multidex/library/libs folder.


Multi-dex support solves this problem. dx 1.8 already allows generating several dex files.

Android L will support multi-dex natively, and next revision of support library is going to cover older releases back to API 4.

It was stated in this Android Developers Backstage podcast episode by Anwar Ghuloum. I've posted a transcript (and general multi-dex explanation) of the relevant part.

method ID not in [0, 0xffff] build error

According to Android developer documentation:

If you have built an Android app and received this error, then congratulations, you have a lot of code! This document explains how to move past this limitation and continue building your app.

Sometimes, importing libraries using gradle dependency can lead to this error. Is there google play services library in your app? If any, instead of compile com.google.android.gms:play-services:9.4.0, you can import libraries that you only want to use for example if you want to use google map, just import com.google.android.gms:play-services-maps:9.4.0 instead com.google.android.gms:play-services:9.4.0. It will help reducing the number of dex generated. You also can use proguard to eliminate unused code.

In versions of Google Play services prior to 6.5, you had to compile the entire package of APIs into your app. In some cases, doing so made it more difficult to keep the number of methods in your app (including framework APIs, library methods, and your own code) under the 65,536 limit.

From version 6.5, you can instead selectively compile Google Play service APIs into your app. For example, to include only the Google Fit and Android Wear APIs, replace the following line in your build.gradle file:

You can refer to Android Guide on how to selectively compiling APIs into your executable

UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

You should add

  multiDexEnabled true

in build.gradle

defaultConfig {

applicationId 'pkg'
minSdkVersion
targetSdkVersion
versionCode
versionName

// Enable MultiDexing: https://developer.android.com/tools/building/multidex.html
multiDexEnabled true
}


Related Topics



Leave a reply



Submit