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

Posted

技术标签:

【中文标题】Android Studio - 错误:程序类型已存在【英文标题】:Android Studio - Error:Program type already present 【发布时间】:2018-06-29 07:43:05 【问题描述】:

当我尝试编译代码时,android Studio 3.0.1 出现以下错误

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

我的毕业代码:

  ...
    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 脚本以修复错误?

【问题讨论】:

我修复了我的 libs 文件夹中的删除 jar 包。 哪个jar包? @Ezra 他通过两种方式将毕加索添加到他的图书馆,他们发生了冲突。我在另一个图书馆犯了这个错误 【参考方案1】:

将此添加到您的模块 build.gradle 文件中

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

【讨论】:

它奏效了!但对我来说,将 v13 更改为 v4 进行轻微更改【参考方案2】:

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

Program type already present: org.json.CDL

在我将 compile acra 添加到我的 gradle 文件后,它开始出现。所以解决方案是像这样添加 acra:

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

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

【讨论】:

感谢您的帖子。对我来说,这是 DavidWebb 图书馆:- github.com/hgoebl/DavidWebb 它对我有用..我还用“实现”替换了“编译”【参考方案3】:

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

【讨论】:

【参考方案4】:

在将 Android Studio 升级到 3.1.2 并将targetSdkVersion 升级到 27 后,我面临构建 APK 的多重麻烦的噩梦。这就是其中之一。

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

此行导致构建错误Program type already present: me.leolin.shortcutbadger.Badger

目前我只是将其注释掉,编译顺利。

【讨论】:

【参考方案5】:

好吧,也许这不是你的情况,但这也是在以下场景中编译出来的消息

我构建了一个应用程序。然后我修改了应用程序 gradle 文件以生成 aar 文件而不是 apk [即apply plugin: 'com.android.library'] 为了将一些必须由原始应用程序调用的方法移到这里

然后 - 在原始应用程序中 - 我评论了我在 aar 文件中移动的方法,并将之前生成的 aar 文件添加到应用程序项目中

此时我得到了同样的错误

消息Error:Program type already present 帮助我理解我必须重命名正在构建库的 Android Studio 项目的包名,因为这两个项目共享相同的包名。所以我重命名了它,我再次构建了 aar 文件,并将这个“新”文件再次添加到构建 apk 的 Android Studio 项目中

完成后问题就消失了

【讨论】:

【参考方案6】:

当您更新库构建版本并且旧的构建文件不清楚时会发生这种情况。或者其他库依赖于该库。就我而言,我更新com.google.gms:google-services

解决方法是打开你的项目文件夹并删除build文件夹并重新打开并清除缓存,文件>Invalidate Caches/Restart

【讨论】:

【参考方案7】:

库版本不匹配。如果您使用的是较新版本的 Android Studio,它将捕获错误。只需解决版本不匹配或更改编译版本即可。

请参阅下面定义的依赖项

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

当库版本不匹配时会发生这种情况。

就我而言,当我从以下位置更新 Google 服务依赖项时:

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

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

错误消失了。

【讨论】:

【参考方案10】:

在我的应用程序中,我添加了这一行并将这个库添加为导入。删除库导入会很好用 从 libs 文件夹导入所有 jar 文件的行。

implementation fileTree(include: ['*.jar'], dir: 'libs')

我仍然在导入此行会导致错误。

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

删除库作为导入将解决问题。如果错误仍然没有,请执行 build > Clean Project。

更多信息在这里找到: https://developer.android.com/studio/build/dependencies#duplicate_classes

【讨论】:

【参考方案11】:

对我来说,当我的 build.gradle 文件包含无效行时出现此错误。

我添加了一个 .jar 文件作为库,但构建失败。我检查了 build.gradle 文件,不知何故它包含两行:

implementation files('libs/bcprov.jar')
implementation files('bcprov.jar')

当然,我只是将.jar添加到libs文件夹中,所以第二行无效。删除第二行后,错误消失了。

希望这会对某人有所帮助。

【讨论】:

【参考方案12】:

当您有重复的依赖项时会发生这种情况,请使用 ./gradlew app:dependencies 列出所有依赖项

例如 dagger 和 robolectric 都依赖于 guava,但是 dagger 的最新版本使用 guava 23+ 而 robolectric 使用 20+,从 robolectric 中排除 guava 将解决这种情况下的问题。

【讨论】:

【参考方案13】:

答案很简单:

转到构建 > 重建项目

【讨论】:

以上是关于Android Studio - 错误:程序类型已存在的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Studio 中构建时重复的类

Android Studio - 资源条目已定义

项目已包含具有此名称的模块 - Android Studio

android studio 虚拟机adb.exe已停止工作的处理

错误:程序类型已存在:android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat

Android Studio 按钮导致崩溃