Intellij:避免定义多个Dex文件'

时间:2015-04-12 19:21:01

标签: java android intellij-idea gradle dependency-management

问题:

到目前为止,我一直在使用Gradle来处理所有依赖项,并且它似乎会处理其他Gradle模块之间的任何重复依赖项。但是,当jar中存在重复依赖时,情况似乎并非如此。

问题:

考虑到我可以控制jar中的内容,使用Gradle处理这些依赖项冲突的最佳实践是什么:

  1. 不要在jar中包含任何外部依赖项,使用build.gradle

  2. 将它们包含在项目本身中
  3. 在jar中包含所有外部依赖项,通过从项目build.gradle中删除它们来删除重复项。 (注意:这似乎不具备可扩展性,例如,如果jars本身之间存在重复项。)

  4. 更好的东西(希望能自动处理)

  5. 编辑: build.gradle文件:

    apply plugin: 'com.android.application'
    
    android {
        signingConfigs {
            release { ... }
            debug { ... }
        }
        compileSdkVersion 19
        buildToolsVersion '19.1.0'
        defaultConfig { ... }
        buildTypes {
            release { ... }
            debug { ... }
        } 
        sourceSets {
            instrumentTest.setRoot('tests')
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v4:20.0.0'
        compile project(':jarModule')
    }
    

1 个答案:

答案 0 :(得分:2)

导入具有您在本地应用中也具有依赖关系的外部jars时,您可以执行以下两项操作:

jar依赖项转换为Gradle依赖项并排除依赖项

例如:

testCompile('org.robospock:robospock:0.5.0')  {
     exclude module: "groovy-all" // <-- excludes groovy from robo spock
}

删除应用中的本地依赖项,并依赖.jar

中的依赖项

例如,在Gson的情况下:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:20.0.0'
    compile project(':jarModule')
    // compile 'com.google.code.gson:gson:2.3.1' // <-- removed
}