Android Studio 0.4 在 APK META-INF/LICENSE.txt 中复制的重复文件
Posted
技术标签:
【中文标题】Android Studio 0.4 在 APK META-INF/LICENSE.txt 中复制的重复文件【英文标题】:Android Studio 0.4 Duplicate files copied in APK META-INF/LICENSE.txt 【发布时间】:2014-01-16 15:37:01 【问题描述】:将我的 Studio 从 0.3.7 更新到 0.4.0 后,我无法编译我的项目。我在***上找到了解决方案:Duplicate files copied (android Studio 0.4.0)
我将我的项目更新到 gradle 0.7.+,但我不知道我必须将下一个字符串放在哪里:
android
packagingOptions
exclude 'META-INF/LICENSE.txt'
我的日志猫:日志
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
附:在ubuntu 13.04开发
【问题讨论】:
在android
部分内
谢谢。我将块 PackagingOptions() 放在主 gradle conf 文件中。首先,我将此块插入到库 gradle 文件中。所有工作都很完美=)
【参考方案1】:
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 文件中添加并同步项目
【讨论】:
【参考方案2】:这很可能是不好的做法,但是如果您包含多个大型库,您可能会发现自己正在处理数百种此类冲突。
下面列出的是针对此类情况的超级简单修复:
android
....
packagingOptions
// Allow the compilation process to choose the dependencies for us.
pickFirst "**"
【讨论】:
【参考方案3】:我只加了2:
android
packagingOptions
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/LICENSE'
【讨论】:
这是否仍会包含在应用程序生产中?【参考方案4】:将依赖项放在顶部,将 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'
编辑:几乎所有操作系统许可证都包含在您的项目中“包含许可证副本”的义务。因此,这意味着您必须在项目中包含您使用的所有操作系统许可证的副本。通过在 gradle 中“排除”它们,您违反了许可证。
将它们排除在项目之外可能不是最佳选择。 谢谢R.S。获取信息。
【讨论】:
@Andree 我们排除文件的原因是因为我们不希望 .txt(和其他)文件包含在构建将生成的 .apk 中。 在 android 之外无法识别排除:/ Exclude 应该在 android 内,然后才有效。 !此解决方案违反了所有开源许可证!因为您有义务将每个库的原始许可文本添加到您的包中 嗨。任何。几乎所有操作系统许可证都包含在您的项目中“包含许可证副本”的义务。因此,这意味着您必须在项目中包含您使用的所有操作系统许可证的副本。通过在 gradle 中“排除”它们,您违反了许可证。【参考方案5】:这将帮助您解决问题
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'
【讨论】:
如果与正确答案基本相同,为什么会有这么多反对意见?【参考方案6】:当java-jwt
和jackson-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")
【讨论】:
【参考方案7】:您可以通过将以下代码添加到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 年前就已经解决了 感谢您的回答 :-) 我今天刚遇到这个问题,发现了这个帖子。而且我没有注意到日期。 您没有注意到日期并忽略了所有其他答案。【参考方案8】:在插入此代码时
android
packagingOptions
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
确保如果在错误中显示
> 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 也存在此错误)
【讨论】:
【参考方案9】:注意!!可能违反开源许可。
按照上面的建议排除 license.txt 文件,您可能会违反一些开源许可,因为开源许可中的一个共同点是同意将其添加到您的源代码中。 最好检查您的开源许可证。
更新: 在有更好的解决方案之前,请使用
packagingOptions
pickFirst 'META-INF/license.txt'
这样你至少履行了部分许可义务
【讨论】:
【参考方案10】:添加:
packagingOptions
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
为我工作,biniam_Ethiopia 的解决方案可能是最安全的
【讨论】:
【参考方案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')
【讨论】:
谢谢!今天我用头撞了大约 5 个小时。 :) 是packagingOptions exclude 'libs/jackson...'
修复了它。【参考方案12】:
添加
android
packagingOptions
exclude 'META-INF/LICENSE.txt'
在 build.gradle 中
【讨论】:
我们这样违反了开源许可证【参考方案13】:我遇到了类似的错误并在没有 packingOptions()
和 exclude
函数的情况下解决了它。我添加了两个依赖项,但一个是第一个的子组。这导致了错误,一旦我删除了其中一个,我就得到了一个干净的构建。我建议在你的依赖块中检查类似的错误。
【讨论】:
嗨,我很久以前通过添加 packingOptions() 解决了这个问题。感谢您的回答)+1 此问题已在 AS 的新可用版本中修复以上是关于Android Studio 0.4 在 APK META-INF/LICENSE.txt 中复制的重复文件的主要内容,如果未能解决你的问题,请参考以下文章