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:
- 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.
- 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
How to Download a PDF File in Android
Send Intent from Service to Activity
Gradle Flavors for Android with Custom Source Sets - What Should the Gradle Files Look Like
How to Change Actionbar Tab Indicator Programmatically
Practical Way to Find Out If Sms Has Been Sent
How to Download a Video File to Sd Card
Using the New "Manifestmerger" Property in Android
Android Studio- "Sdk Tools Directory Is Missing"
Setsupportactionbar Toolbar Cannot Be Applied to (Android.Widget.Toolbar) Error
How to Send Location of the Device on Server When Needed
Android:Textallcaps="False" Not Working for Tablayout Design Support
5.1 Crash - a Taskdescription's Primary Color Should Be Opaque
How to Set an Imageview's Image from a String
Using Webview Sethttpauthusernamepassword
Android.Content.Res.Resources$Notfoundexception: Unable to Find Resource Id #0Xffffffff
Android Studio 4.1 Plugin Error: Plugin * Is Incompatible (Supported Only in Intellij Idea)