7

次の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

FAILURE: ビルドは例外で失敗しました。

  • 問題: タスク ':packageTest' の実行に失敗しました。APK 内の同じパスにファイルが重複しています: LICENSE.txt
4

2 に答える 2

12

Junit v4.5 では、必要なすべての依存関係が JUnit jar にパッケージ化されています。したがって、hamcrest.jar は必要なく、その結果、二重の LICENSE.txt ファイルも作成されません。

依存関係を次のように変更するだけです:

instrumentTestCompile "junit:junit:4.5+"

基本的な問題はまだ残っています - Android はビルド ツリーで同じ 2 つのファイル名を受け入れません。ただし、これは良い回避策です。

于 2013-07-30T17:37:12.993 に答える
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'
      }
    }
于 2013-12-19T21:49:56.930 に答える