Error: Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat

Error: Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat

升级到 Android Studio 3.1 后,我在构建过程中开始出现以下错误。项目使用 multidex,默认情况下启用 DX,您会在错误中注意到这一点。我试图检查依赖关系图以了解发生了什么,但到目前为止还没有任何线索。有趣的是,这只在我的机器上失败。我清理了所有东西,包括重新安装等,但没有任何效果。

有人遇到过同样的问题吗,你们是怎么解决的?或者有什么可以看的方向吗?

AGPBI: {
    "kind":"error",
    "text":"Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat",
    "sources":[{}],
    "tool":"D8"
}

这是失败的任务:

transformDexArchiveWithExternalLibsDexMergerForDebug

我检查了类似的问题,似乎随机的东西解决了他们的问题,我不确定真正的原因是什么。

我通过改变这个来解决我的问题:

implementation 'com.android.support:appcompat-v7:27.0.0'

implementation 'com.android.support:appcompat-v7:26.0.0'

对我有用。

我通过以下步骤设法确定了根本原因。每个问题的用例可能不同,因此这是确定根本原因的方法。

  • 前往android工作室
  • 导航 -> Class
  • 勾选include non-project classes
  • 复制粘贴包含包名称的完整 class 路径。 android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
  • 你应该能看到它用在什么地方。很可能您可能需要将其从其中之一中删除。

在我的例子中,问题是 ViewPagerIndicator 库正在将支持库下载为 jar。删除它解决了问题。

我刚才也遇到了同样的问题。在我的例子中,第三方库使用了旧的 AccessibilityServiceInfoCompat 版本 v4 22,我已经更新到较新的 v4 28,所以两个支持库 类 冲突

在你的情况下,我已经通过

解决了问题
implementation 'com.android.support:appcompat-v7:26.0.0'

 implementation 'com.android.support:appcompat-v7:27.1.1'

一些第三方库可能使用了不同版本的支持库。可以用./gradlew :app:dependencies找出来,然后导入当前版本的支持库。

对我来说这有助于解决此类问题

所有支持库(也包括第三部分)降低到指定版本

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '28.0.0-beta01'
            }
        }
    }
}
I have my solution by change this :
android / build.gradle
buildscript {
    ext {
        supportLibVersion = "27.0.3"
    }
}
to
buildscript {
    ext {
        supportLibVersion = "26.0.0"
    }
}
directory android / app / build.gradle
defaultConfig {
    multiDexEnabled true
}

对于我的解决方案(我不知道它是否适合你):

首先我遵循了@Orhan Obut's解决方案:

我发现在不同的库中有多个 class 个文件。

然后我将忽略注释放在项目模块 build.gradle(应用程序文件夹)中我的支持依赖项上方:

 //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:28.0.0'

我意识到无知不是解决方案,因为错误并没有消失,即使在项目的干净重建和 clearing/invalidating 缓存之后。

参见:Infographic: 11 Most Common Android Errors and How to Fix Them

所以我进一步探索,发现了这个link:

Android - Understanding and dominating gradle dependencies

它提出了解决冲突的方法。因此,我把它放在 gradle 上,就在依赖项声明的上方:

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

从那时起,当我使用上面的 @Orhan Obut's 解决方案搜索重复的 classes 时,我在结果中只找到一个条目。这意味着没有重复项。

此外,如果您使用最新的 SDK 和构建工具迁移到 AndroidX 会更好。确保您在任何地方都没有较旧的支持依赖项。

快乐编码:-)

对于简单的选项,只需添加

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

在 build.gradle 应用程序模块中的依赖项之前,它应该忽略 v4 支持库,重复错误将消失。

在应用级别的 build.gradle 中添加以下行对我有用

    implementation 'com.android.support:support-v4:28.0.0'