Android Studio - 错误:程序类型已经存在

31

当我尝试编译代码时,在Android Studio 3.0.1上出现以下错误:

当我试图编译代码时,Android Studio 3.0.1上出现了这个错误。

Error:Program type already present: com.squareup.picasso.Action$RequestWeakReference

我的Gradle代码:

  ...
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support:design:26.1.0'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.android.support:support-vector-drawable:26.1.0'
    compile 'com.android.support.constraint:constraint-layout:1.1.0-beta4'
    compile 'com.google.firebase:firebase-messaging:11.8.0'
    compile 'com.google.firebase:firebase-ads:11.8.0'
    compile 'com.google.gms:google-services:3.1.0'
    compile 'com.google.android.gms:play-services:11.8.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    testCompile 'junit:junit:4.12'

}

apply plugin: 'com.google.gms.google-services'

我该如何修复我的gradle脚本以解决这个错误?


2
我修复了我的libs文件夹中删除jar包的问题。 - Marcostox
3
哪个 Jar 包? - Ezra
1
@Ezra他通过两种方式将Picasso添加到他的库中,结果出现了冲突。我在另一个库中也犯了这个错误。 - Anice Jahanjoo
13个回答

15

将以下内容添加到您的模块 build.gradle 文件中

  configurations.all {exclude group: 'com.android.support', module: 'support-v13'}

1
它工作了!但是对于我来说,将v13更改为v4的轻微更改非常有效。 - Prasad

6

我刚遇到了同样的问题,所以我将分享解决方法。 我的错误是:

Program type already present: org.json.CDL

并且在我将acra编译到gradle文件后开始出现。 解决方案是像这样添加acra:

    compile('ch.acra:acra:4.5.0') {
    exclude group: 'org.json'
}   

在OP的情况下,解决方案是找出他的依赖项中已经编译了com.squareup.picasso并像上面的代码一样进行排除。

1
感谢您的帖子。对我来说,DavidWebb库是最好的选择:https://github.com/hgoebl/DavidWebb - Sandeep Yohans
1
它对我起作用了.. 我还将“编译”替换为“实现”。 - Himanshu Mori

5

请在您的应用设置中检查编译版本。我已将其更改为与我构建项目所需的API级别兼容的版本。这为我解决了问题。


3

我在将Android Studio升级到3.1.2并将targetSdkVersion升级到27后,构建APK时遇到了多个问题的噩梦,这是其中之一。

implementation 'me.leolin:ShortcutBadger:1.1.21@aar' 

这行代码导致构建错误:Program type already present: me.leolin.shortcutbadger.Badger。目前我已将其注释掉,成功编译。

2

当您更新库的构建版本时,旧的构建文件未清除。或者其他库依赖于该库。在我的情况下,我更新了com.google.gms:google-services

解决方案是打开项目文件夹,删除build文件夹,然后重新打开并清除缓存,选择 文件 > 无效缓存/重启


2

出现了库版本不匹配的问题。如果您使用较新版本的Android Studio,则会出现错误。只需解决版本不匹配或更改编译版本即可恢复正常。

请查看下面定义的依赖关系 dependencies


2
好的,也许这不是你的情况,但这是编译过程中出现的信息,即使在以下场景中:
我构建了一个应用程序。然后我修改了应用gradle文件,以便生成aar文件而不是apk文件[即apply plugin: 'com.android.library'],以将一些原始应用程序需要调用的方法移动到此处。
然后,在原始应用程序中,我注释了我移动到aar文件中的方法,并将aar文件添加到应用程序项目中。
此时,我得到了相同的错误。
消息Error:Program type already present帮助我理解,我必须重命名Android Studio项目的包名称来构建库,因为两者共享相同的包名称。所以我重命名它,再次构建aar文件,并将这个“新”文件再次添加到构建apk的Android Studio项目中。
完成后,问题消失了。

1
这可能是由于库版本不匹配引起的。
在我的情况下,当我更新了Google Services依赖项时:
classpath 'com.google.gms:google-services:3.0.0'

classpath 'com.google.gms:google-services:3.2.1'

错误已消失。

1
我在将Kotlin支持添加到Java项目后,又删除了所有Kotlin文件(但保留了gradle配置),在Android Studio 3.1.2中遇到了这个错误。删除Kotlin配置解决了此问题。

1
在我的应用程序中,我添加了这行代码,并将该库作为导入进行了添加。删除库的导入将正常工作。 这行代码从libs文件夹导入所有jar文件。
implementation fileTree(include: ['*.jar'], dir: 'libs')

依然会导致错误,但我正在导入这行。

implementation(name: 'twitter4j-core-4.0.7', ext: 'jar')

删除库作为导入将解决问题。如果错误仍然存在,请执行构建 > 清理项目。
在此处查找更多信息: https://developer.android.com/studio/build/dependencies#duplicate_classes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接