2

This issue is ligtly connected with the others that i started here:

Instrumentation run failed due to 'java.lang.NoClassDefFoundError' after adding multidex to my application

Unable to merge dex - how to exclude proper jar?

I added multidex support, then also added suport for tests.

I also added exlude to my packagingOptions, but it is not working as i thought.

Here is my build.gradle now:

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

android {
compileSdkVersion 26
buildToolsVersion "26.0.2"


packagingOptions {
    exclude 'protobuf.meta'
    exclude 'android/support/test/filters/RequiresDevice.class'
}

testOptions {
    unitTests {
        includeAndroidResources = true
    }

}
sourceSets {
    test.java.srcDirs += ['build/generated/source/apt/test/debug']
}

defaultConfig {
    multiDexEnabled true

    minSdkVersion 15
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"

//        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
}

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

}

ext.daggerVersion = '2.11'
ext.roomVersion = '1.0.0-rc1'

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'com.android.support:appcompat-v7:26.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation ('com.android.support.test.espresso:espresso-core:2.0') {
    exclude group: 'javax.inject'
}
testImplementation "org.robolectric:robolectric:3.4.2"
kaptTest "com.google.dagger:dagger-compiler:$daggerVersion"
kaptAndroidTest "com.google.dagger:dagger-compiler:$daggerVersion"


// RxJava
implementation 'io.reactivex.rxjava2:rxjava:2.1.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

// Room
implementation "android.arch.persistence.room:runtime:$roomVersion"
implementation "android.arch.persistence.room:rxjava2:$roomVersion"
kapt "android.arch.persistence.room:compiler:$roomVersion"
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.1.51"
androidTestImplementation "android.arch.persistence.room:testing:$roomVersion"

// Dagger
implementation "com.google.dagger:dagger:$daggerVersion"
implementation "com.google.dagger:dagger-android:$daggerVersion"
implementation "com.google.dagger:dagger-android-support:$daggerVersion"
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"

implementation 'pl.charmas.android:android-reactive-location2:2.0@aar'
implementation 'com.google.android.gms:play-services-location:11.4.2'
implementation 'com.google.android.gms:play-services-places:11.4.2'

//Jackson
implementation 'com.fasterxml.jackson.core:jackson-core:2.9.1'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.1'

implementation 'com.android.support:multidex:1.0.2'

}

Here is the error:

FAILURE: Build failed with an exception.

Execution failed for task ':location:transformClassesWithMultidexlistForDebugAndroidTest'.

java.io.IOException: Can't write [C:\TempAndroidProj\location\build\intermediates\multi-dex\androidTest\debug\componentClasses.jar] (Can't read [C:\Users\k.s.gradle\caches\transforms-1\files-1.1\testing-support-lib-0.1.aar\59aec2a639c884ff422cd31cc6e68cad\jars\classes.jar(;;;;;;**.class)] (Duplicate zip entry [classes.jar:android/support/test/filters/RequiresDevice.class]))

So how can i exclude properly the duplicate zip entry?

K.Os
  • 5,123
  • 8
  • 40
  • 95

0 Answers0