【问题标题】:Android Gradle duplicate files copied exceptionAndroid Gradle重复文件复制异常
【发布时间】:2016-12-31 09:03:26
【问题描述】:

我见过这个问题的许多版本,其中的解决方案是简单地排除 META-INF 文件名,但那些已经被排除在外,并且在这种情况下,重复文件甚至不是与 META-INF 关联的文件。当我运行 ./gradlew --stacktrace 时,它​​编译得很好,但如果我在设备上运行应用程序,应用程序会崩溃并出现重复文件警告。

apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "24.0.3"
defaultConfig {
    applicationId "rocks.morrisontech.historicsf"
    minSdkVersion 19
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/license'
}

dependencies {

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.socrata:soda-api-java:0.9.12'
compile 'com.google.code.findbugs:jsr305:2.0.1'
testCompile 'junit:junit:4.12'
// play-services imports
compile 'com.google.android.gms:play-services-maps:10.0.1'

}

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务 ':app:transformResourcesWithMergeJavaResForDebug' 执行失败。

    com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:在 APK com/sun/jersey/impl/api.properties 中复制的文件重复 文件1:/Users/Quinn/.gradle/caches/modules-2/files-2.1/com.sun.jersey/jersey-core/1.9.1/cf6c0f8b945081fca5f5eb7417d10d58cefd7035/jersey-core-1.9.1.jar 文件2:/Users/Quinn/.gradle/caches/modules-2/files-2.1/com.sun.jersey/jersey-bundle/1.9.1/67d37c4e80633a0196b733886441855201742a65/jersey-bundle-1.9.1.jar

  • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。

我注意到 jersey 是 com.socrata:soda-api-java:0.9.12 的依赖项,当我删除该依赖项时,我没有任何问题。我也尝试过使用 soda-android-api,但也有类似的问题。

【问题讨论】:

  • 添加 exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE 而不是你的
  • 我仍然收到同样的警告...

标签: android gradle android-gradle-plugin socrata soda


【解决方案1】:

我在尝试使用带有 Android Studio 的 soda-java 库构建项目时遇到了同样的问题。

似乎有多个文件副本正试图包含在 APK 中。这会导致问题并且不允许构建 APK。我们必须在我们应用程序的 build.gradle 文件中的 android 部分下排除这些文件。

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'com/sun/jersey/impl/api.properties'
    exclude 'com/sun/jersey/impl/spi.properties'
    exclude 'com/sun/jersey/impl/impl.properties'
    exclude 'META-INF/jersey-module-version'
}

基本上,您必须检查每一个错误并添加错误中报告的以下粗体文件。

com.android.builder.packaging.DuplicateFileException:重复文件复制到 APK com/sun/jersey/impl/api.properties

目前我不确定这是否是适当的长期解决方案。但它让我开始编写我的应用程序并开始运行。在发布之前,我将不得不提出一个更长期且可能更合适的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多