构建一个Android应用程序,其targetSdkVersion为25,minSdkVersion为19

我有一个Android应用程序,其targetSdkVersion25 。 它在API 21+上运行良好,但是,我正在尝试修复它以在API 19+ (KitKat)上运行。 我的应用程序确实使用了Material Design,我知道它是在API 21中引入的,但是我在这里看到应该有办法支持移植它。

但是,当我构建并运行时,我收到错误:

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

当我在KitKat模拟器上运行时。

有没有人在尝试反向测试他们的应用程序之前看到此错误?

我的gradle文件有:

 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' 

我可以提供哪些附加信息来帮助调试?

更新完整的gradle代码:

 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' }) } 

更新2

通过从Android Studio 2.2.2启动分支新的Android应用程序,并使用上面的gradle文件,我能够重复这个确切的错误。 所以它似乎与我的应用程序中的实际代码无关(这并不奇怪)。

解决了 。 罪魁祸首是:

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

我不知道为什么,但删除这两个软件包允许整个应用程序运行并部署到<21个版本的Android。

昨天,我检查了我要求的gradle,并删除了以下行compile 'com.sun.mail:android-mail:1.5.6', compile 'com.sun.mail:android-activation:1.5.6'和它编译。 它与任何api级别无关。 这种情况正在发生,因为除了您删除的模块之外还有另一个模块,该模块使用具有相同类avax/activation/MimeTypeParseException.class的相同包。 您是否在Application类中添加了以下内容?

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

您不能添加两个支持库,因为它们相互重叠。 只需使用一个:support-v4。

您需要尝试使用支持注释库而不是jetbrains注释。 所以改变

 compile 'org.jetbrains:annotations-java5:15.0' 

 compile 'com.android.support:support-annotations:25.0.0' 

然后使用For @Nullable注释:

 import android.support.annotation.Nullable; 

对于@NonNull

 import android.support.annotation.NonNull; 

加成:
不要忘记更改buildToolsVersiontargetSdkVersioncompileSdkVersionSupport Library以使用相同的API级别。


UPDATE
您需要删除apt插件并使用annotationProcessor作为android-apt的文档说:

从apt到annotationProcessor

从Android Gradle插件版本2.2开始,Android-apt之前提供的所有function现在都可以在Android插件中使用。 这意味着android-apt正式过时;)以下是迁移的步骤:

  • 确保您使用的是Android Gradle 2.2插件或更新版本。
  • 从构建脚本中删除android-apt插件
  • 将所有apt,androidTestApt和testApt依赖项更改为新格式:

     dependencies { compile 'com.google.dagger:dagger:2.0' annotationProcessor 'com.google.dagger:dagger-compiler:2.0' } 

还要从build.gradle中删除apt插件,即:

 apply plugin: 'com.neenbedankt.android-apt' 

删除joda-time的重复条目,只使用其中一个:

 compile 'joda-time:joda-time:2.9.5' compile 'joda-time:joda-time:2.9.6' 

建议:
您需要删除一些具有类似目的的库:

 compile 'de.hdodenhof:circleimageview:2.1.0' compile 'com.makeramen:roundedimageview:2.2.1' compile 'com.liuzhuang.opensource:rcimageview:0.0.2' compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar' 

选择一个真正适合您需求的产品。 不要浪费宝贵的时间来检查所有这些。

此外,您只需选择以下图像库中的一个:

 compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.github.stfalcon:frescoimageviewer:0.3.1' compile 'com.github.bumptech.glide:glide:3.7.0'