【问题标题】:Android Studio - Error:Program type already presentAndroid Studio - 错误:程序类型已存在
【发布时间】: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 他通过两种方式将毕加索添加到他的图书馆,他们发生了冲突。我在另一个图书馆犯了这个错误

标签: android android-studio gradle build build.gradle


【解决方案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】:

                      答案很简单:

                      转到构建 > 重建项目

                      【讨论】:

                        猜你喜欢
                        • 2019-04-22
                        • 1970-01-01
                        • 2021-11-26
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-10-13
                        相关资源
                        最近更新 更多