Android Studio 0.4 APK META-INF / LICENSE.txtにコピーされた重複ファイル


115

Studioを0.3.7から0.4.0に更新した後、プロジェクトをコンパイルできません。Stackoverflowで解決策を見つけました:重複ファイルがコピーされました(Android Studio 0.4.0)

プロジェクトをgradle 0.7。+に更新しましたが、次の文字列をどこに配置する必要があるのか​​わかりません。

android {

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

私のlogcat:ログ

Execution failed for task ':Prog:packageDebug'.
> Duplicate files copied in APK META-INF/LICENSE.txt
    File 1: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar
    File 2: /home/scijoker/AndroidStudioProjects/ProgProject/Prog/libs/httpclient-4.1.1.jar

PS ubuntu 13.04で開発


2
内部androidセクション
Eugen Martynov

ありがとう。メインのgradle confファイルにブロックpackagingOptions()を入れました。まず、このブロックをライブラリのgradleファイルに挿入しました。すべての作業は完璧です=)
a.black13

回答:


155

依存関係を一番上に置き、packageOptionsを最後に置くとうまくいきました。

apply plugin: 'android'. 

これがappフォルダーにある私の完全なbuild.gradleです。

dependencies {
    compile 'com.android.support:support-v4:+'
    compile files('libs/apache-mime4j-0.6.jar')
    compile files('libs/httpmime-4.0.jar')
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 10
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-    rules.txt'
    }


    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
}

編集:ほとんどすべてのOSライセンスには、プロジェクトに「ライセンスのコピーを含める」義務が含まれています。つまり、使用するすべてのOSライセンスのコピーをプロジェクトに含める必要があります。それらをgradleで「除外」すると、ライセンスに違反します。

プロジェクトからそれらを除外することは最良のオプションではないかもしれません。RSさん、情報ありがとうございます。


2
@Andreeファイルを除外する理由は、ビルドによって生成される.apkに.txt(およびその他の)ファイルを含めたくないためです。
ビニアム2014

4
excludeはandroid以外では認識されません{}:/
An-droid

4
除外はandroid {}内にある必要があり、それだけが機能します。
Pavan Pyati

2
!このソリューションはすべてのオープンソースライセンスに違反しています!各ライブラリの元のライセンステキストをパッケージに追加する必要があるため
RS

2
こんにちは。どれか。ほとんどすべてのOSライセンスには、プロジェクトに「ライセンスのコピーを含める」義務が含まれています。つまり、使用するすべてのOSライセンスのコピーをプロジェクトに含める必要があります。それらをgradleで「除外」すると、ライセンスに違反します。
RS

47

注意!!オープンソースライセンス違反の可能性があります。

上記で提案されているように、license.txtファイルを除外すると、ソースに追加することに同意することがオープンソースライセンスの一般的なポイントになるため、一部のオープンソースライセンスに違反する可能性があります。オープンソースライセンスを確認することをお勧めします。

更新: より良い解決策が見つかるまで、

packagingOptions {
   pickFirst  'META-INF/license.txt'
}

このように、少なくともライセンス義務の一部を満たします


23

追加するだけ

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

build.gradle


このようなオープンソースライセンスに違反しています
RS

16

次のコードをに追加することで修正できますproject/app/build.gradle

android {
    // Fixed build error : Duplicate files copied in APK META-INF/xxx
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'
    }
}

こんにちは。この問題は1.5年前に修正されました。回答をありがとう
a.black13

:-)今日この問題に出会い、このスレッドを見つけました。そして、私は日付に気づきません。
AlfredZhong、2015

あなたは日付に気づかず、他のすべての答えを無視しました。
驚異的なJan

11

私はgradleの新しいバージョンと同じ問題に直面していました、私にとってbuild.gradleテキストフォーマットの作業は以下の通りです:

私のlibsフォルダーには2つのジャクソンjarがあります。

android {
         compileSdkVersion 21
         buildToolsVersion "21.1.2"

         defaultConfig {
            applicationId "com.omtlab.myapplication"
            minSdkVersion 14
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
         }
         buildTypes {
             release {
                 minifyEnabled false
                 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
         }
         packagingOptions {
            exclude 'libs/jackson-core-asl-1.9.13.jar'
            exclude 'libs/jackson-mapper-asl-1.9.13.jar'
            exclude 'META-INF/ASL2.0'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/NOTICE'
         }
}

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile files('libs/jackson-core-asl-1.9.13.jar')
    compile files('libs/jackson-mapper-asl-1.9.13.jar')
}

ありがとうございました!今日は5時間ほど頭を叩いていた。:)それはpackagingOptions { exclude 'libs/jackson...' }それを修正したものです。
CJBrew 2016

8

追加:

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

私のために働いた、biniam_Ethiopiaの解決策はおそらく最もフェイルセーフです


8

このコードを挿入している間

android{

packagingOptions{
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
 }
}

SUREをMAKEしている場合、エラー、それが表示されています

> APK META-INF / LICENSE.txtにコピーされた重複ファイル

それから加えて

 android{

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

}

エラーが発生した場合

> APK META-INF / LICENSEにコピーされた重複ファイル

それから加えて

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}

エラーが発生した場合

> APK META-INF / license.txtにコピーされた重複ファイル

それから加えて

 android{

packagingOptions{
    exclude 'META-INF/license.txt'
 }

}

短いテキストでは、CASEとドキュメントFORMAT(.txt)が非常に重要です。

(このエラーはAndroid Studio 1.1.0にも存在します)


6

これは問題を解決するのに役立ちます

packagingOptions {
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/DEPENDENCIES'
}

なぜこれが基本的に正しい答えと同じであるのに、なぜこれはそれほど多くの反対票を持つのですか?
Necronet、2016年

4
packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
}

build.gradleファイルとsynプロジェクトを追加



2

私は同様のエラーがあり、packingOptions()and exclude関数なしでそれを解決しました。2つの依存関係を追加しましたが、1つは最初のサブグループでした。これによりエラーが発生し、そのうちの1つを削除すると、クリーンビルドが得られました。依存関係ブロック内で同様のエラーを確認することをお勧めします。


こんにちは、私はこの問題をpackingOptions()を追加することでずっと前に解決しました。回答ありがとうございます)+1
a.black13 14年

この問題は、ASの新しい利用できるバージョンで修正される
a.black13

2

使用している場合java-jwtjackson-core一緒に次のコマンドを使用します。

exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties")
exclude("META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml")

2

これは非常に悪い習慣である可能性がありますが、複数の大きなライブラリを含める場合は、これらの種類の競合を何百回も経験する可能性があります。

以下は、このような場合の非常に簡単な修正です。

android { 
    ....
    packagingOptions {
        // Allow the compilation process to choose the dependencies for us.
        pickFirst "**"
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.