Search code examples
androidgradlematerial-designandroid-4.4-kitkat

Building an Android app with targetSdkVersion of 25 and minSdkVersion 19


I have an Android app that has a targetSdkVersion of 25. It runs great on API 21+, however, I am trying to fix it to run on API 19+ (KitKat). My app does use Material Design, which I know was introduced in API 21, however I have seen here that there should be ways to back port it.

However, when I build and run, I am get the error:

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: javax/activation/MimeTypeParseException.class

when I run on an KitKat emulator.

Has anyone seen this error before when trying to back-version test their apps?

My gradle file has:

compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:design:25.0.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:percent:25.0.0'
compile 'com.android.support:palette-v7:25.0.0'
compile 'org.jetbrains:annotations-java5:15.0'
compile 'com.android.support:support-v4:25.0.0'
compile 'com.android.support:support-v13:25.0.0'

What additional information can I provide to help debug this?

Update Full gradle code:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'idea'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'io.fabric'

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/mimetypes.default'
    }
    compileSdkVersion 25
    buildToolsVersion '25.0.0'
    defaultConfig {
        applicationId "com.ohmd.ohmd"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 10
        versionName "2.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
        renderscriptTargetApi 25
        renderscriptSupportModeEnabled true
    }
    dataBinding {
        enabled = true
    }
    lintOptions {
        abortOnError false
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildTypes {
        release {
            minifyEnabled false
            debuggable true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            debuggable true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
    compileSdkVersion 25
}


idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}

repositories {
    jcenter()
    maven { url 'http://repo1.maven.org/maven2' }
    maven { url "https://maven.java.net/content/groups/public/" }
    maven { url "https://jitpack.io" }
    maven { url 'https://maven.fabric.io/public' }
}


configurations.all {
    resolutionStrategy {
        force 'junit:junit:4.12'
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'net.sf.flexjson:flexjson:2.1'
    compile('org.apache.abdera:abdera-i18n:1.1.1') {
        exclude module: 'support-v4'
    }
    compile('org.eclipse.paho:org.eclipse.paho.android.service:1.1.0') {
        exclude module: 'support-v4'
        transitive=true
    }
    compile('org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0') {
        exclude module: 'support-v4'
    }

    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:design:25.0.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:percent:25.0.0'
    compile 'com.android.support:palette-v7:25.0.0'
    compile 'com.mcxiaoke.volley:library:1.0.19'
    compile 'com.android.support:support-annotations:25.0.0'
    compile 'com.android.support:support-v4:25.0.0'
    compile 'com.sun.mail:android-mail:1.5.6'
    compile 'com.sun.mail:android-activation:1.5.6'
    compile 'com.afollestad.material-dialogs:core:0.9.0.2'
    compile 'com.afollestad.material-dialogs:commons:0.9.0.2'
    compile 'com.code-troopers.betterpickers:library:3.0.1'
    compile 'commons-codec:commons-codec:1.10'
    compile 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'
    compile 'com.joanzapata.iconify:android-iconify-material:2.2.2'
    compile 'com.joanzapata.iconify:android-iconify-material-community:2.2.2'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'org.apache.commons:commons-lang3:3.4'
    compile 'com.github.satyan:sugar:1.5'
    compile 'org.apache.httpcomponents:httpcore:4.4.1'
    compile 'com.fasterxml.jackson.core:jackson-core:2.7.3'
    compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.3'
    compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
    compile 'com.github.boxme:asyncmanager:1.0.0'
    compile 'com.miguelcatalan:materialsearchview:1.4.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'de.hdodenhof:circleimageview:2.1.0'
    compile 'com.makeramen:roundedimageview:2.2.1'
    compile 'joda-time:joda-time:2.9.5'
    compile 'com.android.support:recyclerview-v7:25.0.0'
    compile 'com.github.stfalcon:frescoimageviewer:0.3.1'
    compile 'joda-time:joda-time:2.9.6'
    compile 'com.liuzhuang.opensource:rcimageview:0.0.2'
    compile 'com.uncopt:android.justified:1.0'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.google.auto.value:auto-value:1.2'
    compile 'com.karumi:dexter:2.3.0'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.1.6'
    compile 'com.google.auto.value:auto-value:1.2'
    compile 'com.googlecode.libphonenumber:libphonenumber:7.2.2'
    compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
    compile 'com.github.nekocode:Badge:1.6.2'
    compile 'com.sjl:Foredroid:1.0.0'
    compile 'com.kaopiz:kprogresshud:1.0.5'
    compile 'com.wang.avi:library:2.1.3'
    compile 'kr.pe.burt.android.lib:androidoperationqueue:0.0.2'
    apt "com.google.auto.value:auto-value:1.2"
    compile 'com.ryanharter.auto.value:auto-value-parcel:0.2.4-rc2'
    apt 'com.ryanharter.auto.value:auto-value-parcel:0.2.4-rc2'
    compile 'jp.wasabeef:recyclerview-animators:2.2.5'
    compile 'me.leolin:ShortcutBadger:1.1.10@aar'
    compile 'com.cocosw:bottomsheet:1.+@aar'
    compile 'com.github.tajchert:nammu:1.1.1'
    compile('com.frosquivel:magicalcamera:5.0.2@aar') {
        transitive = false;
    }

    // Circular progress bar
    compile 'com.github.castorflex.smoothprogressbar:library-circular:1.2.0'

    // Google Play services (old versions, but they work)
    compile 'com.google.android.gms:play-services:6.5.87'

    // Secure shared preferences
    compile 'online.devliving:securedpreferencestore:0.2.4'

    // Included libraries
    compile project(':animation-core')
    compile project(':animation-abslistview')
    compile project(':animation-circular-progress-button')

    // Fabic
    compile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') {
        transitive = true;
    }
    compile('com.crashlytics.sdk.android:answers:1.3.10@aar') {
        transitive = true;
    }

    // Segment
    compile 'com.segment.analytics.android:analytics:4.+'

    // Test components
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'
    androidTestCompile 'com.android.support:support-annotations:25.0.0'
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    androidTestCompile('com.android.support.test.espresso:espresso-intents:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    androidTestCompile('com.android.support.test.espresso:espresso-web:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
}

Update 2

I have been able to repeat this exact error by starting a branch new Android app from Android Studio 2.2.2, and using the above gradle file. So it has seems to have nothing to do with the actual code inside my app (which is not surprising).


Solution

  • Solved. The culprits were:

    compile 'com.sun.mail:android-mail:1.5.6'
    compile 'com.sun.mail:android-activation:1.5.6'
    

    I have no idea why, but removing these two packages allowed the entire app to be run and deployed to < 21 versions of Android.