我正在尝试在Android Studio中构建一个应用程序。将Eclipse Paho库作为Gradle依赖性(还是Maven?我是Android生态系统的新手)之后,我得到了以下错误:

Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
Message{kind=ERROR, text=Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat, sources=[Unknown source file], tool name=Optional.of(D8)}

我已经检查了许多与此错误有关的堆叠式问题,但是答案都是特定于某些库的。**I’m looking not only for a solution to the error, but an understanding of what the error means.**这样,人们就可以更容易地找出针对特定情况的解决方案。到目前为止,尚未提供任何答案。

从其他stackoverflow答案来看,我收集到它与我的gradle文件有关。因此,这里是应用程序/build.gradle:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "---REDACTED FOR PRIVACY---"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:support-media-compat:27.1.0'
    implementation 'com.android.support:support-v13:27.1.0'
    implementation 'com.google.android.gms:play-services-maps:12.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.0.2'
}

repositories {
    maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/' }
} 

答案

这个问题通常来自命名冲突,在您的情况下,支持用V4库,该库是多个库的使用。

找到list of dependencies 对于模块app(该应用程序的默认模块的名称)我们可以做一个gradlew app:dependencies检索所有库的列表。

我们发现support-v4由以下方式使用:

//short version of the dependencies list highlighting support-v4
+--- com.android.support:support-v13:27.1.0
|    \--- com.android.support:support-v4:27.1.0

+--- com.google.android.gms:play-services-maps:12.0.1
|    +--- com.google.android.gms:play-services-base:12.0.1
|    |    +--- com.google.android.gms:play-services-basement:12.0.1
|    |    |    +--- com.android.support:support-v4:26.1.0 -> 27.1.0 (*)

+--- org.eclipse.paho:org.eclipse.paho.android.service:1.0.2
|    +--- com.google.android:support-v4:r7  // <- problem here

我们看到地图上的支持-V4将使用support-v13提供的版本。

我们还看到Eclipse库正在使用另一个版本(R7 ??)。

要解决您的问题,您可以尝试排除模块support-v4从这样的日食库中:

implementation ('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
    exclude module: 'support-v4'
}

然后,您应该能够编译您的应用程序。

顺便说一句,您应该注意日食模块不会通过测试代码来破坏。

来自: stackoverflow.com