Android gradle build:在APK LICENSE.txt打包期间重复文件

时间:2013-07-29 12:52:17

标签: android gradle android-build

我正在尝试使用以下gradle构建文件构建Android测试

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

apply plugin: 'android-library'

repositories {
  mavenCentral()
}

dependencies {
    instrumentTestCompile "junit:junit:4.+"        
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    instrumentTest.setRoot('tests')
    instrumentTest {
      java.srcDirs = ['tests/src']
      res.srcDirs = ['tests/res']
      assets.srcDirs = ['tests/assets']
      resources.srcDirs = ['tests/src']
        }        
    }
}

运行时出现以下错误:

  

错误:在打包APK期间重复文件...存档中的路径:LICENSE.txt       原点1:.... gradle / caches / artifacts-24 / filestore / junit / junit / 4.11 / jar / 4e031bb61df09069aeb2bffb4019e7a5034a4ee0 / junit-4.11.jar       原点2:.... gradle / caches / artifacts-24 / filestore / org.hamcrest / hamcrest-core / 1.3 / jar / 42a25dc3219429f0e5d060061f71acb49bf010a0 / hamcrest-core-1.3.jar   :packageTest FAILED

     

失败:构建因异常而失败。

     
      
  • 出了什么问题:   任务':packageTest'的执行失败。   在APK内的同一路径重复文件:LICENSE.txt
  •   

2 个答案:

答案 0 :(得分:12)

Junit v4.5已将所有必需的依赖项打包到JUnit jar中。因此不需要hamcrest.jar,也不需要生成双LICENSE.txt文件。

只需将依赖项更改为:

  

instrumentTestCompile“junit:junit:4.5+”

基本问题仍然存在 - android在其构建树中不接受两个相同的文件名。 不过,这是一个很好的解决方法。

答案 1 :(得分:5)

我注意到AOSP中的这个提交评论,解决方案是使用DSL排除一些文件。可能在0.7.1发布时。

commit e7669b24c1f23ba457fdee614ef7161b33feee69
Author: Xavier Ducrohet <--->
Date:   Thu Dec 19 10:21:04 2013 -0800

    Add DSL to exclude some files from packaging.

    This only applies to files coming from jar dependencies.
    The DSL is:

    android {
      packagingOptions {
        exclude 'META-INF/LICENSE.txt'
      }
    }