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

Posted

技术标签:

【中文标题】错误:程序类型已存在:android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat【英文标题】:Error: Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat 【发布时间】:2018-09-22 00:43:01 【问题描述】:

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

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

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

这是失败的任务:

transformDexArchiveWithExternalLibsDexMergerForDebug

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

【问题讨论】:

【参考方案1】:

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

首先我关注@Orhan Obut's解决方案:

Search for duplicate classes in your project

我发现不同的库中有不止一个类文件。

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

 //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

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

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

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

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

快乐编码:-)

【讨论】:

你需要找出不同版本中哪个类是重复的。【参考方案2】:

我有我的解决方案,改变这个:

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

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

它对我有用。

【讨论】:

不幸的是,这对我不起作用。有趣的是,除了我之外,其他人都可以。【参考方案3】:

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

去安卓工作室 导航 -> 类 检查include non-project classes 复制粘贴完整的类路径和包名。 android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat 您应该能够看到它的使用位置。很可能您可能需要将其从其中之一中删除。

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

【讨论】:

我删除了 viewpager 指标库并且工作正常.. fr.avianey.com.viewpagerindicator:library:2.4.1.1 程序类型已经存在:android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat 这种情况怎么办?【参考方案4】:

为了简单的选择,只需添加

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

在 build.gradle app 模块中的依赖之前,它应该忽略 v4 支持库,重复错误就会消失。

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

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'
            
        
    

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

在你的情况下,我已经解决了问题

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

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

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:
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

【讨论】:

以上是关于错误:程序类型已存在:android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat的主要内容,如果未能解决你的问题,请参考以下文章

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

错误:程序类型已存在:android.support.design.widget.CoordinatorLayout$Behavior

错误:程序类型已存在:com.google.android.gms.internal.measurement.zzdz 添加分析后

Android:v7 支持 lib 27.1.0 的编译错误“程序类型已存在”android.support.v7.recyclerview.extensions.ListAdapter

程序类型已存在:android.support.compat.R $ attr

程序类型已存在:com.google.android.gms.location.places.zza