Android Studio 0.4在APK META-INF/LICENSE.txt中复制的重复文件

a.b*_*k13 113 android gradle android-gradle-plugin

在我将Studio从0.3.7更新到0.4.0之后,我无法编译我的项目.我在stackoverflow上找到了一个解决方案:复制了重复文件(Android Studio 0.4.0)

我将我的项目更新为graged 0.7.+,但我不知道我必须把下一个字符串放在哪里:

android {

    packagingOptions {
       exclude 'META-INF/LICENSE.txt'
    }
}
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

PS开发在ubuntu 13.04

bin*_*iam 154

将dependecies放在顶部,最后的packageOptions为我工作.

apply plugin: 'android'. 
Run Code Online (Sandbox Code Playgroud)

这是我在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'
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:几乎所有操作系统许可证都包含"在您的项目中包含许可证副本"的义务.这意味着,您必须包含您在项目中使用的所有操作系统许可证的副本.通过在gradle中"排除"它们,您违反了许可证.

将它们从项目中排除可能不是最佳选择.谢谢RS的信息.

  • 在android {}之外无法识别exclude:/ (4认同)
  • 排除应该在android {}内,然后才有效. (4认同)
  • @Andree我们排除文件的原因是因为我们不希望.txt(和其他)文件包含在将由构建生成的.apk中. (2认同)
  • !此解决方案违反了所有开源许可证!因为您有义务将每个库的原始许可文本添加到您的包中 (2认同)
  • 你好.任何.几乎所有操作系统许可证都包含"在您的项目中包含许可证副本"的义务.这意味着,您必须包含您在项目中使用的所有操作系统许可证的副本.通过在gradle中"排除"它们,您违反了许可证. (2认同)
  • RS,您知道Android上的惯例是在您的应用中只有一个活动,显示您使用的所有库及其各自的许可证,是吗?没有许可证字面上说您必须将其作为.txt文件包含在内,事实上将其包含在您的APK中绝对没有任何结果. (2认同)

R.S*_*R.S 46

注意!!可能的OpenSource许可证违规.

如上所述排除license.txt文件,您可能违反了一些开源许可证,因为它是开源许可证中的一个共同点,同意将其添加到您的源代码中.更好地检查您的开源许可证.

更新: 在有更好的解决方案之前,请使用

packagingOptions {
   pickFirst  'META-INF/license.txt'
}
Run Code Online (Sandbox Code Playgroud)

像这样,你至少履行了许可义务的一部分


小智 23

加上

android {
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
    }
}
Run Code Online (Sandbox Code Playgroud)

在build.gradle中


小智 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'
    }
}
Run Code Online (Sandbox Code Playgroud)


Dhi*_*dya 11

我遇到了与新版本gradle相同的问题,下面的build.gradle文本格式适用于我:

我的libs文件夹中有两个jackson 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')
}
Run Code Online (Sandbox Code Playgroud)


Jan*_*ans 8

添加:

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
}
Run Code Online (Sandbox Code Playgroud)

为我工作,biniam_Ethiopia的解决方案可能是最安全的


Shr*_*t N 8

插入此代码时

android{

packagingOptions{
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
 }
}
Run Code Online (Sandbox Code Playgroud)

如果错误显示,请确认

>在APK META-INF/LICENSE.txt中复制的重复文件

然后加

 android{

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

}
Run Code Online (Sandbox Code Playgroud)

如果错误显示

>在APK META-INF/LICENSE中复制的重复文件

然后加

 android{

packagingOptions{
    exclude 'META-INF/LICENSE'
 }

}
Run Code Online (Sandbox Code Playgroud)

如果错误显示

>在APK META-INF/license.txt中复制的重复文件

然后加

 android{

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

}
Run Code Online (Sandbox Code Playgroud)

简而言之,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'
}
Run Code Online (Sandbox Code Playgroud)