Relm
Relm

Reputation: 8287

How to properlly enable multiDex in android

I've setup MultiDex, but doesn't seem to be working on my case, what might I be missing? Had the same setup on some app, worked there.

Also, I'm using the new Android Studio 3.0 Canary 1, if that might have an effect.

MANIFEST

<application
        android:name=".Global"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

GRADLE

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        multiDexEnabled true
        useLibrary 'org.apache.http.legacy'
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    ...
    compile 'com.android.support:multidex:1.0.1'

}

APPLICATION CLASS

public class Global extends MultiDexApplication {
   @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
    }
}

ERRORS

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzbrq;
Error:com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzbrq;
Error:  at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:608)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:563)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:545)
Error:  at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167)
Error:  at com.android.dx.merge.DexMerger.merge(DexMerger.java:194)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.mergeDexes(DexArchiveMergerCallable.java:66)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:54)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:37)
Error:  at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
Error:  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
Error:  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
Error:  at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzbrq;

Upvotes: 1

Views: 4284

Answers (4)

Jaydeep Khambhayta
Jaydeep Khambhayta

Reputation: 5349

gradle file ..official link

android {
        compileSdkVersion 22
        buildToolsVersion "23.0.0"

             defaultConfig {
                 minSdkVersion 14 //lower than 14 doesn't support multidex
                 targetSdkVersion 22

                 // Enabling multidex support.
                 multiDexEnabled true
             }
    }

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

chnage in your activity.

public class YouApplication extends Application {

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

}

Upvotes: 0

AskNilesh
AskNilesh

Reputation: 69754

create one class

public class Multi_Dex extends Application {
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}}

imports this library

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

set multltidexenavbled true in your gradle like this

defaultConfig {
    multiDexEnabled true
    minSdkVersion 19
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

im your manifiest file define your apllication name properrty like this

        android:name="com.pkg.Multi_Dex"

Upvotes: 0

Piyush Patel
Piyush Patel

Reputation: 381

Try this

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

MultiDex.install(this); this line remove from on create

Upvotes: 2

sapan ravani
sapan ravani

Reputation: 88

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        useLibrary 'org.apache.http.legacy'
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            multiDexEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:multidex:1.0.1'
}

Upvotes: 0

Related Questions