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

时间:2018-01-20 01:23:40

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

当我尝试编译代码时,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脚本以修复错误?

13 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:5)

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

Program type already present: org.json.CDL

它在我将grara文件添加到gradle文件后开始出现。因此解决方案是添加这样的acra:

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

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

答案 2 :(得分:4)

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

答案 3 :(得分: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

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

答案 4 :(得分:1)

库版本不匹配。如果您使用的是较新版本的Android Studio,则会捕获error.just解决版本不匹配或更改编译版本,您将启动并运行。

请参阅下面定义的依赖项 dependencies

答案 5 :(得分:1)

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

我构建了一个应用程序。然后我修改了应用程序gradle文件以生成aar文件而不是apk [即Error:Program type already present]以便在此处移动原始应用程序必须调用的一些方法

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

此时我得到了同样的错误

消息probabilities = classifier.predict_proba(X_test) max_probabilities = probabilities.max(axis=1) order=np.argsort(probabilities, axis=1) classification=(classifier.classes_[order[:, -1:]]) print(accuracy_score(classification,y_test)) 帮助我理解我必须重命名正在构建库的Android Studio项目的包名,因为两者共享相同的包名。所以我重命名了,我再次构建了aar文件,然后我再次将这个“新”文件添加到构建apk的Android Studio项目中

一旦完成,问题就消失了

答案 6 :(得分:1)

如果库版本不匹配,可能会发生这种情况。

就我而言,我更新了Google服务依赖项:

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

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

错误消失了。

答案 7 :(得分: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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

我添加了一个.jar文件作为库,并且构建失败。我检查了build.gradle文件,并以某种方式包含两行:

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

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

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

答案 10 :(得分:0)

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

例如dagger和robolectric都依赖于番石榴,但是dagger的最新版本使用guava 23+,而robolectric使用20+,从robolectric中排除番石榴将解决此问题。

答案 11 :(得分:0)

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

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

答案 12 :(得分:-3)

答案很简单:

转到“构建”>“重建项目”