Android 错误::打包APK时重复文件
安卓工作室。我在应用程序运行期间遇到这种错误Android 错误::打包APK时重复文件,android,android-gradle-plugin,Android,Android Gradle Plugin,安卓工作室。我在应用程序运行期间遇到这种错误 错误:任务:app:packageDebug的执行失败。在APK META-INF/notice.txt中复制的重复文件 build.gradle apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.1" packagingOptions { exclude 'META-INF/DEPENDENCIES
错误:任务:app:packageDebug的执行失败。在APK META-INF/notice.txt中复制的重复文件
build.gradle
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/ASL2.0'
}
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:19.0.1'
compile 'com.j256.ormlite:ormlite-android:4.48'
compile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
compile 'com.octo.android.robospice:robospice:1.4.11'
compile 'com.octo.android.robospice:robospice-spring-android:1.4.11'
}
如何修复此错误
已编辑
这些排除选项解决了我的问题:
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/ASL2.0'
}
我认为字符串比较区分大小写。尝试使用
排除“META-INF/notice.txt”
简短回答:
使用gradle assembly
和查看详细的gradle输出
请注意重复的文件,并使用以下方法排除它们:
android {
packagingOptions {
exclude 'META-INF/notice.txt'
}
}
长答覆:
从命令行运行assembly
gradle任务以获得详细输出:
/gradlew汇编| | gradle汇编
这将自动显示要排除的内容:
studioWorkspace/CCDroid git:(master) ✗ ± ./gradlew assembleDebug
:app:preBuild
:app:compileDebugNdk UP-TO-DATE
:app:preDebugBuild
:app:checkDebugManifest
:app:preReleaseBuild
:app:prepareComAndroidSupportAppcompatV72200Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42200Library UP-TO-DATE
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava UP-TO-DATE
:app:preDexDebug UP-TO-DATE
:app:dexDebug UP-TO-DATE
:app:processDebugJavaRes UP-TO-DATE
:app:validateDebugSigning
:app:packageDebug
Error: duplicate files during packaging of APK /Users/shubham/code/studioProjects/CCDroid/app/build/outputs/apk/app-debug-unaligned.apk
Path in archive: LICENSE
Origin 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
Origin 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-all/1.8.4/5c97d8b6e715ed941aeb93d6fc401ab3eb18a566/mockito-all-1.8.4.jar
You can ignore those files in your build.gradle:
android {
packagingOptions {
exclude 'LICENSE'
}
}
:app:packageDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:packageDebug'.
> Duplicate files copied in APK LICENSE
File 1: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
File 2: /Users/shubham/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.14.8/8ac073941721e0b521ec8e8bad088b1e7b8cd332/lombok-1.14.8.jar
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 11.863 secs
请参见输出中的此部分:
android {
packagingOptions {
exclude 'LICENSE'
}
}
它甚至显示了产生重复文件(许可证)的依赖项列表。查看输出中带有原点的行。这不止一个错误,您是对的 在
apply plugin:'android library'
加上:
安卓{
包装选项{
排除“META-INF/ASL2.0”
排除“META-INF/许可证”
排除“META-INF/通知”
}
}
第一个错误是由文件副本引起的,第二个错误是由许可证和通知文件引起的。
之后就行了
编辑::
请参阅我在此处发布的关于识别问题的帖子:
我认为您只需要在build.gradle中包含以下选项:
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
将此添加到build.gradle文件中
packagingOptions {
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
像这样
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "your package name"
minSdkVersion 14
targetSdkVersion 25
versionCode 30
versionName "3.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/NOTICE' // will not include NOTICE file
exclude 'META-INF/LICENSE' // will not include LICENSE file
exclude 'META-INF/DEPENDENCIES' // will not include LICENSE file
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
这对我有用
android {
...
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/ASL2.0'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
}
}
有趣的是,当我从gradle中删除这一行时,它起了作用:
compile 'org.apache.commons:commons-lang3:3.3.1'
为了找到包装选项的正确位置,我不得不四处玩了一会儿。解决jackson core:2.2和jackson databind:2.2之间冲突的重复文件问题 此外,DSL最近似乎也发生了变化 因此,在最近的Android Studio 1.4.1和buildTools 23中,您必须将Android.packaging选项放在与compileOptions相同的级别上,而不是放在任何模型{Android{brates
可能的重复不是重复!其他提问者通过添加exlude选项修复了他们的错误。但正如大家所看到的,我添加了这些选项,我的问题没有消失。关于这个问题,有什么想法也解决了我的问题吗?谢谢。我的回答是尝试使用
notice.txt
而不是notice.txt
这个错误看起来实际上与发生排除的错误不同。您的src/main/resources/
文件中是否有META-INF/notice.txt
文件?抱歉,Xavier。我当时不明白您的答案。现在我明白您的意思了。我试图更改为排除“META-INF/notice.txt”
,但控制台提示了复制了APK META-INF/NOTICE.txt中的重复文件。奇怪,不是吗?在C:\PathToAndroidStudioProject\src\main
下没有资源
目录。如果你把排除“META-INF/NOTICE.txt”和排除“META-INF/NOTICE.txt”
放在build.gradle文件中,它能工作吗?谢谢。这很有帮助。:)e在“android”部分,尝试添加:packagingpoptions{exclude'META-INF/ASL2.0'exclude'META-INF/LICENSE'}
对这个问题有什么想法吗?我几乎忽略了你的答案,尽管它对我来说是正确的。我建议将答案放在帖子的顶部:android{packagingpoptions}{exclude'LICENSE'}后面是解释和长gradle输出(这与答案基本无关。这部分内容是您可以忽略构建中的那些文件。gradle:android{packagingpoptions{exclude'LICENSE'}完成。非常感谢@gorbysbm。关于这个问题有什么想法吗?最后,在实现了这个问题之后,我解决了这个问题。谢谢男士:)
model {
android {
compileSdkVersion = 21
buildToolsVersion = "23.0.1"
defaultConfig.with {
applicationId = "com.android.sensorgraph"
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 22
}
}
android.packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
compileOptions.with {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
}