Сборка Android gradle: дублирование файлов во время упаковки APK LICENSE.txt

Я пытаюсь создать тест Android, используя следующий файл сборки gradle

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

person Guy    schedule 29.07.2013    source источник


Ответы (2)


Junit v4.5 упаковал все необходимые зависимости в JUnit jar. Следовательно, нет необходимости в hamcrest.jar и в результирующем двойном файле LICENSE.txt.

просто измените зависимости на:

instrumentTestCompile "junit: junit: 4.5+"

Основная проблема по-прежнему остается - android не принимает два одинаковых имени файла в своем дереве сборки. Однако это хороший обходной путь.

person Guy    schedule 30.07.2013
comment
+1, в простоях использование junit: junit: 4. + разрешит все, что выше 4.0, включая 4.5+. Но у studio / gradle есть эта проблема, когда она не обновляет зависимости или время от времени ищет новые зависимости. Обходной путь - игнорировать кеш и перезагрузить зависимости. - person Varun; 20.12.2013

Я заметил этот комментарий коммита в 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'
      }
    }
person Maxime    schedule 19.12.2013
comment
Я добавил исключения для license.txt. В студии это не помогает. Когда я создаю / запускаю тесты с терминала, он работает отлично, но когда я пытаюсь запустить его изнутри студии Android, он жалуется на повторяющиеся файлы. - person wnc_21; 23.10.2014