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

时间:2018-04-12 01:52:30

标签: android android-studio build android-multidex

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

任何人都有同样的问题,你是如何解决的?或者我可以看看的任何方向?

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

这是失败的任务:

transformDexArchiveWithExternalLibsDexMergerForDebug

我检查了类似的问题,似乎随机的事情解决了他们的问题,我不确定究竟是什么原因。

10 个答案:

答案 0 :(得分:13)

我通过更改此解决方案:

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

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

它对我有用。

答案 1 :(得分:11)

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

  • 转到android studio
  • 导航 - >类
  • 检查include non-project classes
  • 使用包名复制粘贴完整类路径。 android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
  • 您应该能够看到它的使用位置。很可能你可能需要从其中一个中删除它。

在我的情况下,问题是ViewPagerIndicator库正在下载支持库作为jar。删除它解决了这个问题。

答案 2 :(得分:9)

对于我的解决方案(我不知道它将对您有用):

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

Search for duplicate classes in your project

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

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

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

我意识到无知不是解决方案,因为即使清除清理并清除/使项目的缓存无效后,错误也不会消失。

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

因此,我进行了更多探索,并找到了此链接:

Android - Understanding and dominating gradle dependencies

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

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

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

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

快乐编码:-)

答案 3 :(得分:5)

对于简单选项,只需添加

slice

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

答案 4 :(得分:1)

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

所有支持库(也包括第三部分)缩减为指定的版本

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'
            }
        }
    }
}

答案 5 :(得分:1)

将以下行添加到应用程序级别的build.gradle中对我来说很有效

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

答案 6 :(得分:0)

不久前,我也遇到了同样的问题。在我的情况下,第三方库使用了较旧的AccessibilityServiceInfoCompat版本v4 22,而我已经更新到了较新的v4 28,因此两个支持库类都发生冲突

答案 7 :(得分:0)

如果您是通过以下方式解决了问题

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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
}