java – How do I enable multidex for react native?-ThrowExceptions

Exception or error:

I’m pretty sure its a built in feature but I cant find anything when searching or in the docs. Is there a flag for building with multidex enabled?

On another note:
Any way to see which libraries are messing with your method count? Hitting the 64k limit came as quite a surprise.

How to solve:

For RN 0.59+ and using Gradle 3.4.1, none of the answers here had the complete solution. I did the following and it worked:

  1. In android/app/build.gradle, update the dependency block:

    dependencies {
        // ... your other dependencies
    
        // Multidex
        implementation 'com.android.support:multidex:1.0.3'
    }
    

    And also update the defaultConfig in the android block:

    defaultConfig {
        // ... your `applicationId`, etc.
        multiDexEnabled true
    }
    
  2. In MainApplication.java, replace
    import android.app.Application;
    

    at the top with

    import android.support.multidex.MultiDexApplication;
    

    OR if you’re on RN 0.60+ or have manually upgraded to AndroidX then use this instead:

    import androidx.multidex.MultiDexApplication;
    
  3. Still in MainApplication.java, replace
    public class MainApplication extends Application implements ReactApplication {
    

    with

    public class MainApplication extends MultiDexApplication implements ReactApplication {
    

###

Found the answer somewhere else. It’s no different than enabling it for any regular Android project.

android {
    ....
    defaultConfig {
        ...
        multiDexEnabled true
    }

As for method count, this site does the trick: http://inloop.github.io/apk-method-count/

###

android/app/build.gradle

android {
    ....
    defaultConfig {
        ...
        multiDexEnabled true
    }

If you are using Multidex, your Application should extends MultiDexApplication instead of Application.

MyApplication.java

import android.support.multidex.MultiDexApplication;

public class MyApplication extends MultiDexApplication{
     ...
}

###

Since Application must extend ReactApplication, I used a similar approach to the one suggested here which is documented in point 2 in the Android Developer reference on multidex to attach to the base context:

app/build.gradle

android {
    compileSdkVersion projectCompileSdkVersion // Or your version

    defaultConfig {
        minSdkVersion projectMinSdkVersion // Or your version
        targetSdkVersion projectTargetSdkVersion // Or your version
        multiDexEnabled true // *
    }
    dexOptions {
        jumboMode true // *
    }
}

dependencies {
  compile 'com.android.support:multidex:1.0.3' // https://mvnrepository.com/artifact/com.android.support/multidex
}

MainApplication.java

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

###

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

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

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

https://developer.android.com/studio/build/multidex

Leave a Reply

Your email address will not be published. Required fields are marked *