Gradle构建重复条目

时间:2016-04-19 17:28:21

标签: java android

我正在使用库aFileChooser构建项目。我已经将它导入我的工作室,创建了一个" build.gradle"对于它(因为我有另一个问题"没有名为default&#34的配置;或类似的smth)。使用新的构建文件,构建正常。但是部署一个apk来启动不是。

我在尝试将我的应用部署到手机时遇到重复输入问题。确切的问题是:

  

错误:任务':app:transformClassesWithJarMergingForDebug'执行失败。    com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:android / support / v4 / hardware / display / DisplayManagerCompat.class

我已经看过很多关于重复的问题,但没有一个答案对我有帮助。我试过排除" support-v4"模块,尝试删除依赖项等。似乎没有任何作用,问题仍然存在。

以下是我的gradle文件:

aFileChooser build.gradle

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0'}
 }


  apply plugin: 'android-library'

repositories {
mavenCentral()
}

android {
compileSdkVersion 22
buildToolsVersion "23.0.2"

defaultConfig {
    minSdkVersion 18
    targetSdkVersion 22
}

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        renderscript.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

}
   }
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:support-v4:22.1.1'
}

app build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "ua.com.vendetta8247.testmate"
        minSdkVersion 18
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        multiDexEnabled = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:support-v4:22.1.1'
    compile ('com.android.support:appcompat-v7:22.2.1')
    compile ('com.android.support:recyclerview-v7:22.2.1')
    compile ('com.android.support:cardview-v7:22.2.1')
    compile ('com.android.support:design:22.2.1')

    compile (project(':libs:aFileChooser'))
}

常规构建

sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        // 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
}

无论我尝试什么,我都会得到例外。如果我删除"依赖关系"在aFileChooser中,文件无法编译,因为它们缺少v4文件。

更新1

我按照一个答案的建议运行gradle -q dependencies yourProject:dependencies --configuration compile。这是我的输出:

+--- com.android.support:appcompat-v7:22.2.1
+--- com.android.support:recyclerview-v7:22.2.1
|    \--- com.android.support:support-annotations:22.2.1
+--- com.android.support:cardview-v7:22.2.1
+--- com.android.support:design:22.2.1
|    \--- com.android.support:appcompat-v7:22.2.1
\--- project :aFileChooser
     \--- com.android.support:support-v4:22.2.1
          \--- com.android.support:support-annotations:22.2.1

1 个答案:

答案 0 :(得分:1)

在搜索SO,Google文档和其他来源大约10个小时后,我发现此问题可能与项目相关。解决方案很简单:

gradle clean
gradle assembleDebug

那就是它。

现在我将解释为什么会这样。导入库后,我必须创建自己的构建脚本,并在库中混淆一些属性。我想Android Studio安装了较新版本的Gradle,而没有删除以前的配置或接近它的东西。这就是为什么我建议那些有类似问题的人每次添加新库时清理他们的项目