我从Eclipse导出了我的项目并使用此链接中的说明导入到Android Studio:http://developer.android.com/sdk/installing/migrate.html
当我建立时,我有一个错误:
Duplicate files copied in APK META-INF/DEPENDENCIES
搜索后,我找到了一个解决方案:添加
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
进入build.gradle
。它有效!
但是我不明白为什么我有这个错误以及为什么我必须应用该修复。有人可以解释一下吗?
答案 0 :(得分:62)
虽然Scott Barta的回答是正确的,但缺乏一个简单而通用的解决方案:只需添加
# You will need import:
from django.db.models import Sum, IntegerField, Case, When, Value
with_scores = authors.annotate(total_book_score=Sum(
Case(When(books__published=2015, then=Value(F('books__score'))),
default=Value(0), output=IntegerField()) # Or float if it fits your needs.
)
)
到您的build.gradle中忽略这些重复项。
答案 1 :(得分:38)
在Android Gradle构建中,不允许在输出中多次包含具有相同路径的同一文件。在您的构建中,有两个来自不同位置的META-INF/DEPENDENCIES
个文件。由于您的应用程序根本不需要此文件,因此最简单的方法是告诉构建系统完全忽略它,这就是exclude
指令的作用。
还有一个pickFirst
指令告诉构建系统保留一个副本;在Android Gradle plugin 0.7.0: "duplicate files during packaging of APK"中有一些细节。
Gradle中的Android版本对重复文件非常严格,这会让生活变得困难。如果您多次包含相同的Java类,那么会出现类似的问题,您会收到“多个dex文件定义”错误(请参阅Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat)以获取典型示例。
其他构建系统更宽松。例如,如果你在类路径中多次包含同一个类,那么它在Java中是典型的,它看到的第一个副本是使用的副本;之后重复的内容将被忽略。这在大多数情况下更容易处理,但它有几个问题。最大的问题是,如果文件的多个不同版本在您不知情的情况下蔓延到构建中,则可能存在细微的错误 - 很难弄清楚正在发生的事情。当你搞清楚时,你通常可以通过处理包含事物的顺序来解决它,以确保你想要的那个使它成为最终输出,但是在非常复杂的构建中,这可能很难实现,并且它可能会发生这样一种看似不相关的事情,比如在你的项目中包含新的库会破坏顺序并导致很多祸患。
出于这个原因,Gradle的理念是不依赖于事物的排序来确定解决重复的游戏中的“赢家”,并且它迫使开发人员明确所有依赖关系。 Android在Gradle之上实现其构建系统遵循了这一理念。
答案 2 :(得分:10)
最简单的解决方案是添加
packagingOptions {
pickFirst 'META-INF/*'
}
到android部分的build.gradle
答案 3 :(得分:2)
我发现解决此问题的最简单方法是使用通配符,因此您不必手动声明每个文件存在冲突。
packagingOptions {
pickFirst '**'
}
答案 4 :(得分:0)
答案 5 :(得分:-3)
依赖项{ 实现fileTree(include:['* .jar'],dir:'libs') 实施'com.android.support:appcompat-v7:28.0.0' 实施'com.android.support:design:27.1.1' 实现'com.android.support.constraint:constraint-layout:1.0.2' 实施'com.google.android.gms:play-services-ads:10.2.1' 实施'com.android.support:support-annotations:25.0.1' testImplementation'junit:junit:4.12'
**// select only one in two line below** implementation ‘package’ //implementation project(‘:package’)
}
//祝你好运