1

I am trying to integrate apps performance monitoring tool with my Android Application by my gradle fails saying

Error:Execution failed for task ':app:transformClassesWithMultidexlistForLiveDebug'.
> java.util.NoSuchElementException (no error message)

Below is my gradle root gradle file

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.appdynamics:appdynamics-gradle-plugin:4.+'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

And here is my App's gradle file,

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"


    defaultConfig {
        applicationId "com.app.abc"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1"
        multiDexEnabled true
    }

    dexOptions {
        preDexLibraries = false
        javaMaxHeapSize "4g"
    }

    signingConfigs {
        config {
            keyAlias 'xxx'
            keyPassword 'xxx'
            storeFile file('xxx')
            storePassword 'xxx'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
        }
        debug {
            debuggable true
            minifyEnabled false
        }
    }

    afterEvaluate {
        tasks.matching {
            it.name.startsWith('dex')
        }.each { dx ->
            if (dx.additionalParameters == null) {
                dx.additionalParameters = []
            }
            dx.additionalParameters += "--set-max-idx-number=55000" 
        }
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }

    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }

    sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }
}

dependencies {
    ...
    compile 'com.appdynamics:appdynamics-runtime:4.+'
}

I am already having Multidex flag enabled still it gives me the problem while running the Application.

And, also I have in my Application class

 @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
hmz
  • 1,017
  • 9
  • 18
Lalit Poptani
  • 67,150
  • 23
  • 161
  • 242

1 Answers1

0

I've tried add multi dex without giving any minimum or maximum of method count per dex file wise.I've tried with simply just adding multidex and able to build.And Yes!! I am able to build app too.

major change is in afterEvaluate & incremental true in dexoption.

build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.3'    
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 18
        renderscriptTargetApi 18
        //renderscriptSupportModeEnabled true
        // To enable MultiPle dex
        multiDexEnabled true
    }
    dexOptions {
        // Option to handle multi dex
        incremental true
        javaMaxHeapSize "4g" // try with 2g as it worked for my case its working in both cases
        // here 4g i got this thing from https://groups.google.com/forum/#!topic/adt-dev/P_TLBTyFWVY
    }
    packagingOptions {

        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'

    }
    signingConfigs {
        Release {
            keyAlias 'helloworld'
            keyPassword 'helloworld'
            storeFile file('../helloworld')
            storePassword 'helloworld'
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-project.txt'
        }
        debug {
            signingConfig signingConfigs.Release
        }
    }
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'

      compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'

    compile 'com.google.android.gms:play-services-maps:8.4.0'
    compile 'com.google.android.gms:play-services-ads:8.4.0'
    compile 'com.google.android.gms:play-services-analytics:8.4.0'
    compile 'com.google.code.gson:gson:2.6'    
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'    
    compile 'com.appdynamics:appdynamics-runtime:4.+'
}
afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex' // enable multidex without giving minimum or maximum limit
    }
}

application's parent gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.appdynamics:appdynamics-gradle-plugin:4.+'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

If above thing have still issue just check your dependecies hierarchy if any other extra dependecies are added (Based on your build.gradle packagingOptions there should be some other dependecies there).Not sure but it may possible because of internal library conflicts its not proceeding further to create dexfile or build.

Let me know if anything

user1140237
  • 5,015
  • 1
  • 28
  • 56