30

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.

Kloar
  • 1,109
  • 2
  • 9
  • 25

6 Answers6

84

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 {
    
Brandon
  • 4,486
  • 8
  • 33
  • 39
  • 5
    For those who still have the issue following this answer, check whether the following line is correct. The import should be `androidx.multidex.MultiDexApplication`. Not `android.support.multidex.MultiDexApplication`. This is the import statement that worked for me. – buddhiv Jul 09 '19 at 12:18
  • Added a note and alternate instructions about RN 0.60+ / AndroidX. Thanks @buddhiv ! – Brandon Aug 02 '19 at 13:54
  • I tried everything but it still gives me the issue. Does anyone of you can help with this?? – Siddharth Choudhary Sep 30 '19 at 15:11
  • 1
    As suggested below these steps are only needed when minSdkVersion is 20 or less. If you can, upping this version to 21 will fix the issue. Reference: https://developer.android.com/studio/build/multidex – Randam Oct 27 '19 at 08:15
  • Thank you, the `RN 0.60+` tips helps a lot!! – Halt Jan 07 '20 at 08:09
  • Does `implementation 'com.android.support:multidex:1.0.3'` work even when using RN 0.60+ / AndroidX? In this case, maybe we should use `implementation 'androidx.multidex:multidex:2.0.1'`. https://developer.android.com/studio/build/multidex.html – felipeptcho May 04 '20 at 19:20
  • @Randam Champ! Should be an answer. – Ash Aug 20 '20 at 02:04
17

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/

Kloar
  • 1,109
  • 2
  • 9
  • 25
5

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{
     ...
}
Alex Lévy
  • 656
  • 1
  • 8
  • 15
3

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);
}
LordParsley
  • 3,808
  • 2
  • 30
  • 41
0

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

Aung Myint Thein
  • 390
  • 5
  • 17
0

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 ;)

Hardik Desai
  • 1,089
  • 12
  • 20