2

我见过这个问题的许多版本,其中解决方案是简单地排除 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 File1 中复制的重复文件:/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,但也有类似的问题。

4

1 回答 1

0

在尝试使用带有 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中复制的重复文件

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

于 2017-06-02T03:26:21.783 回答