How do I enable multidex for react native?

Viewed 24760

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.

6 Answers

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 {
    

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

Step:1

Open the /android/app/build.gradle

android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true <-- ADD THIS LINE
    }
}

Step:2

In the same file find dependencies

dependencies {
    ...
    implementation 'androidx.multidex:multidex:2.0.1' <-- ADD THIS LINE
    ...
}

Note: To know latest version for multidex Multidex Latest Version

Step:3

Open the MainApplication.java file under

android/app/src/main/java/.../MainApplication.java

Add the multidex Import

// ... all your other imports here

import androidx.multidex.MultiDexApplication; <-- ADD THIS LINE

Our class definition needs extends MultiDexApplication like below

Beofre (In my case)

public class MainApplication extends Application implements ReactApplication {

After

public class MainApplication extends MultiDexApplication implements ReactApplication {

Replace Application with MultiDexApplication

Spet:4 (Optional)

clean the project

Reference How To Enable Multidex in Android

Hope this helps ;)

Related