247

I am building an app with SugarORM Library but when I try to build the project for API 17 (didn't check for others) it shows build error.

 Information:Gradle tasks [:app:assembleDebug] :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE :app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE :app:prepareComAndroidSupportDesign2330Library UP-TO-DATE :app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE :app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE :app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE :app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE :app:prepareComAndroidVolleyVolley100Library UP-TO-DATE :app:prepareComGithubSatyanSugar14Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesPanorama840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE :app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE :app:prepareDebugDependencies :app:compileDebugAidl UP-TO-DATE :app:compileDebugRenderscript UP-TO-DATE :app:generateDebugBuildConfig UP-TO-DATE :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets UP-TO-DATE :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources UP-TO-DATE :app:mergeDebugResources UP-TO-DATE :app:processDebugManifest UP-TO-DATE :app:processDebugResources UP-TO-DATE :app:generateDebugSources UP-TO-DATE :app:compileDebugJavaWithJavac Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. :app:compileDebugNdk UP-TO-DATE :app:compileDebugSources :app:prePackageMarkerForDebug :app:transformClassesWithDexForDebug Error:The number of method references in a .dex file cannot exceed 64K. Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 Information:BUILD FAILED Information:Total time: 21.663 secs Information:2 errors Information:0 warnings Information:See complete output in console 

But when I build this project for android v5.0 or above, it works fine. If I remove SugarORM gradle dependency it works fine for both devices v4.2.2 and v5.0.

7
  • 2
    developer.android.com/tools/building/multidex.html. check this Commented Apr 22, 2016 at 4:47
  • try using proguard this link android-arsenal.com/details/1/337 specifies using SugarORM with proguard Commented Apr 22, 2016 at 4:53
  • 33
    Just got this after upgrading to api 23. It is simply impossible to be productive with Android. Every sdk breaks stuff. Every update to AS breaks stuff. Error messages unusable. AS broken. Garbage, garbage, garbage. Commented Jul 12, 2016 at 7:11
  • 1
    @RunLoop don't loose hope....I found that android is the best platform ever developed....Moch Flexible and powerful....As you will get your hands dirty into coding....It will be fine....Every error message is useful. But need to understand messages Commented Jul 12, 2016 at 7:49
  • 2
    @Balaj Khan One or more of the answers is exemplary and worthy of an additional bounty.Just to the point and accurate answer. I suggest the top (and accepted) answer !. Commented Mar 3, 2019 at 9:09

16 Answers 16

533
+50

You have too many methods. There can only be 65536 methods for dex.

As suggested you can use the multidex support.

Just add these lines in the module/build.gradle:

android { defaultConfig { ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { implementation 'androidx.multidex:multidex:2.0.1' //with androidx libraries //implementation 'com.android.support:multidex:1.0.3' //with support libraries } 

Or if using module/build.gradle.kts:

android { // other properties defaultConfig { ... // Enabling multidex support. multiDexEnabled = true } ... } dependencies { implementation("androidx.multidex:multidex:2.0.1") // with androidx libraries // implementation("com.android.support:multidex:1.0.3") // with support libraries } 

Also in your Manifest add the MultiDexApplication class from the multidex support library to the application element

 <?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="androidx.multidex.MultiDexApplication"> <!-- If you are using support libraries use android:name="android.support.multidex.MultiDexApplication" --> <!--If you are using your own custom Application class then extend --> <!--MultiDexApplication and change above line as--> <!--android:name=".YourCustomApplicationClass"> --> ... </application> </manifest> 

If you are using your own Application class, change the parent class from Application to MultiDexApplication.
If you can't do it, in your Application class override the attachBaseContext method with:

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

Another solution is to try to remove unused code with ProGuard - Configure the ProGuard settings for your app to run ProGuard and ensure you have shrinking enabled for release builds.

Sign up to request clarification or add additional context in comments.

9 Comments

@Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); MultiDex.install(this); } also override
What if I don't have too many methods. I don't have that much methods on my app. I believe that it doesn't even reach that.
I only did these two parts: "multiDexEnabled true" and compile 'com.android.support:multidex:1.0.0', in my build.grandle file. I did not have to change anything in my manifest file nor do the other things you mentioned about overriding attachBaseContext, etc. But your solution fixed the problem for me! Thanks.
@NeonWarge Probably because of your dependencies. Perhaps, you have included the entire Google Play Services? Check this answer for details
I am working on flutter and adding only multiDexEnabled true in defaultConfig works for me thnx
|
203

In android/app/build.gradle

android { compileSdkVersion 23 buildToolsVersion '23.0.0' defaultConfig { applicationId "com.dkm.example" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true } 

Put this inside your defaultConfig:

multiDexEnabled true 

it works for me

3 Comments

This is for Lollipop or higher only isn't it?
It makes the build successful, but app crashes after launch.
in have same problem in my project but when set multidex as true the problems not fix until i enable multidex in module application of project
26

Change the app level build.gradle :

android { compileSdkVersion 23 buildToolsVersion '23.0.0' defaultConfig { applicationId "com.dkm.example" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true } 

it worked for me.

2 Comments

yes, it is a old issue, but for last versions of API we need only multiDexEnabled option, without dependencies or manifest file changes
Let's hopefully get this to the top then.
22

I got this error message because while coding my project auto update compile version in my build.gradle file :

android { ... buildToolsVersion "23.0.2" ... } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' } 

Solve it by correcting the version:

android { ... buildToolsVersion "23.0.2" ... } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' } 

2 Comments

I'm creating simple app, which worked fine until I tried following the Google Map Objects tutorial. Suddenly I wasn't able to compile anymore. This solution has fixed that for me. How on earth did you work it out?
This method luckily worked because new compile libraries have too many methods (exceeds 65536), and old libraries doesn't. So it is just a quick fix, sooner or later you should fix by adding multidex support like the accepted answer.
19

This is what worked for me:

This happens because there are too many unused methods. Most of these methods are coming from included libraries in your build.gradle

Use minify and shrink resources to fix this with gradle and clean up your code at the same time.

buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled true shrinkResources true } } 

Comments

16

This error can also occur when you load all google play services apis when you only using afew.

As stated by google:"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 when your app needs play-services-maps ,play-services-location .You need to add only the two apis in your build.gradle file at app level as show below:

compile 'com.google.android.gms:play-services-maps:10.2.1' compile 'com.google.android.gms:play-services-location:10.2.1' 

Instead of:

compile 'com.google.android.gms:play-services:10.2.1' 

For full documentation and list of google play services apis click here

Comments

16

When your app references exceed 65,536 methods, you encounter a build error that indicates your app has reached the limit of the Android build architecture

Multidex support prior to Android 5.0

Versions of the platform prior to Android 5.0 (API level 21) use the Dalvik runtime for executing app code. By default, Dalvik limits apps to a single classes.dex bytecode file per APK. In order to get around this limitation, you can add the multidex support library to your project:

dependencies { implementation 'com.android.support:multidex:1.0.3' } 

Multidex support for Android 5.0 and higher

Android 5.0 (API level 21) and higher uses a runtime called ART which natively supports loading multiple DEX files from APK files. Therefore, if your minSdkVersion is 21 or higher, you do not need the multidex support library.

Avoid the 64K limit

  • Remove unused code with ProGuard - Enable code shrinking

Configure multidex in app for

If your minSdkVersion is set to 21 or higher, all you need to do is set multiDexEnabled to true in your module-level build.gradle file

android { defaultConfig { ... minSdkVersion 21 targetSdkVersion 28 multiDexEnabled true } ... } 

if your minSdkVersion is set to 20 or lower, then you must use the multidex support library

android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 28 multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.3' } 

Override the Application class, change it to extend MultiDexApplication (if possible) as follows:

public class MyApplication extends MultiDexApplication { ... } 

add to the manifest file

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

Comments

11

I have been facing the same problem and for multidex support, you have to keep in mind the minSdkVersion of your application. If you are using minSdkVersion 21 or above then just write multiDexEnabled true like this

defaultConfig { applicationId ******************* minSdkVersion 21 targetSdkVersion 24 versionCode 1 versionName "1.0" multiDexEnabled true } 

It works for me and if you are using minSdkVersion below 21 (below lolipop) then you have to do two extra simple things

1. First add this dependency

compile 'com.android.support:multidex:1.0.1'

in your build.gradle.

2. Last and second add one this below line to your application in manifest

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

<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:name="android.support.multidex.MultiDexApplication" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Bingo then it will work in the lower version also..:) Happy coding

Comments

9

add this to avoid multidex issue for react native or any android project

android { defaultConfig { ... // Enabling multidex support. multiDexEnabled true } } dependencies { implementation 'com.android.support:multidex:1.0.3' //with support libraries //implementation 'androidx.multidex:multidex:2.0.1' //with androidx libraries 

Comments

7

**

For Unity Game Developers

**

If anyone comes here because this error showed up in their Unity project, Go to File->Build Settings -> Player Settings -> Player. go to Publishing Settings and under the Build tab, enable "Custom Launcher Gradle Template". a path will be shown under that text. go to the path and add multiDexEnabled true like this:

defaultConfig { minSdkVersion **MINSDKVERSION** targetSdkVersion **TARGETSDKVERSION** applicationId '**APPLICATIONID**' ndk { abiFilters **ABIFILTERS** } versionCode **VERSIONCODE** versionName '**VERSIONNAME**' multiDexEnabled true } 

Comments

4

Just a side comment, Before adding support for multidex - make sure you are not adding unnecessary dependencies.

For example In the official Facebook analytics guide

They clearly state that you should add the following dependency:

implementation 'com.facebook.android:facebook-android-sdk:[4,5)' 

which is actually the entire FacebookSDK - so if you need for example just the Analytics you need to replace it with:

implementation 'com.facebook.android:facebook-core:5.+' 

Facebook partial SDK options

1 Comment

Totally agree. In my case for example, I just needed the "login with facebook" button and was using the entire facebook sdk. I've replaced it with facebook-core and facebook-login and the error has gone.
4

I changed my minSdkVersion to 20 and it worked for me. Check https://developer.android.com/studio/build/multidex#mdex-gradle for more details

Comments

3

For me Upgrading Gradle works.Look for update at Android Website then add it in your build.gradle (Project) like this

 dependencies { classpath 'com.android.tools.build:gradle:2.2.0-alpha4' .... } 

then sync project with gradle file plus it might be happened sometimes because of java.exe (in my case) just force kill java.exe from task manager in windows then re run program

Comments

3

Can also try this :

android{ . . // to avoid DexIndexOverflowException dexOptions { jumboMode true } } 

Hope it helps someone. Thanks

Comments

1

Do this, it works:

defaultConfig { applicationId "com.example.maps" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" multiDexEnabled true } 

1 Comment

Please explain your answer. Code-only answers are discouraged on SO. Thank you.
-1

you can enable "Instant Run" on Android Studio to get multidex support.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.