热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

com.android.tools.r8.errors.CompilationError:程序类型已存在:androidx.annotation.AnimRes

如何解决《com.android.tools.r8.errors.CompilationError:程序类型已存在:androidx.annotation.AnimRes》经验,为你挑选了1个好方法。

我正在尝试重建我用kotlin编写的项目,但它一直因错误而失败

Program type already present: androidx.annotation.AnimRes

我试过了

使缓存无效

清洁和重建

使用./gradlew build --stacktrace --info命令

但没有成功.

例外是

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithMultidexlistForDebug'

堆栈跟踪是

Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: Error while generating the main dex list.
        at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
        at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
        at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        ... 111 more
Caused by: com.android.build.api.transform.TransformException: Error while generating the main dex list.
        at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:143)
        at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
        at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
        at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
        ... 124 more
Caused by: com.android.builder.multidex.D8MainDexList$MainDexListException: com.android.tools.r8.errors.CompilationError: Program type already present: androidx.annotation.AnimRes
        at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:87)
        at com.android.build.gradle.internal.transforms.D8MainDexListTransform.transform(D8MainDexListTransform.kt:128)
        ... 127 more
Caused by: com.android.tools.r8.errors.CompilationError: Program type already present: androidx.annotation.AnimRes
        at com.android.tools.r8.utils.ProgramClassCollection.resolveClassConflictImpl(ProgramClassCollection.java:64)
        at com.android.tools.r8.utils.ProgramClassCollection.lambda$create$0(ProgramClassCollection.java:25)
        at com.android.tools.r8.utils.ProgramClassCollection.create(ProgramClassCollection.java:24)
        at com.android.tools.r8.graph.LazyLoadedDexApplication$Builder.build(LazyLoadedDexApplication.java:124)
        at com.android.tools.r8.dex.ApplicationReader.read(ApplicationReader.java:123)
        at com.android.tools.r8.dex.ApplicationReader.read(ApplicationReader.java:86)
        at com.android.tools.r8.GenerateMainDexList.run(GenerateMainDexList.java:41)
        at com.android.tools.r8.GenerateMainDexList.run(GenerateMainDexList.java:111)
        at com.android.builder.multidex.D8MainDexList.generate(D8MainDexList.java:83)
        ... 128 more

我的应用程序的build.gradle是

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.my.app.id"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled true
    }
    buildToolsVersion '28.0.2'
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    //kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

    //support
    implementation "androidx.legacy:legacy-support-v4:$androidX"
    implementation "androidx.appcompat:appcompat:$androidX"
    implementation "androidx.constraintlayout:constraintlayout:1.1.2"
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "androidx.recyclerview:recyclerview:$androidX"
    implementation "androidx.vectordrawable:vectordrawable:$androidX"
    implementation "androidx.cardview:cardview:$androidX"
    implementation "androidx.palette:palette:$androidX"
    implementation "com.google.android.material:material:$androidX"

    //architecture
    implementation "androidx.lifecycle:lifecycle-runtime:$architectureVersion"
    implementation "androidx.lifecycle:lifecycle-extensions:$architectureVersionExt"
    implementation "androidx.legacy:legacy-support-v4:$androidX"
    kapt "androidx.lifecycle:lifecycle-compiler:$architectureVersion"

    //data binding
    //kapt "androidx.databinding:databinding-compiler:3.3.0-alpha04"

    //glide
    //kapt "com.github.bumptech.glide:compiler:$glideVersion"
    //implementation "com.github.bumptech.glide:glide:$glideVersion"
    implementation 'com.github.bumptech.glide:glide:4.8.0-SNAPSHOT'
    implementation 'com.github.bumptech.glide:okhttp-integration:4.8.0-SNAPSHOT'

    //dagger
    implementation "com.google.dagger:dagger:$daggerVersion"
    kapt "com.google.dagger:dagger-compiler:$daggerVersion"
    implementation "com.google.dagger:dagger-android:$daggerVersion"
    implementation "com.google.dagger:dagger-android-support:$daggerVersion"

    // if you use the support libraries
    kapt "com.google.dagger:dagger-android-processor:$daggerVersion"

    //reactiveX
    implementation "io.reactivex.rxjava2:rxandroid:$rxandroidVersion"
    implementation "io.reactivex.rxjava2:rxjava:$rxjavaVersion"
    implementation "io.reactivex.rxjava2:rxkotlin:$rxKotlinVersion"

    //
    implementation "com.jakewharton.rxbinding2:rxbinding:$rxBinding"
    implementation "com.tbruyelle.rxpermissions2:rxpermissions:$rxPermissions"

    //ucrop
    implementation "com.github.yalantis:ucrop:$uCrop"

    //other libraries
    implementation "com.google.code.gson:gson:$gson"
    implementation "com.googlecode.libphonenumber:libphonenumber:$phoneLibVersion"

    //map and places
    implementation "com.google.android.gms:play-services-places:$mapVersion"
    implementation "com.google.android.gms:play-services-maps:$mapVersion"

    //
    implementation 'com.budiyev.android:circular-progress-bar:1.2.0'

    //retrofit
    implementation "com.squareup.retrofit2:retrofit:$retrofit"
    implementation "com.squareup.retrofit2:converter-gson:$retrofit"
    implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofit"
    debugImplementation "com.squareup.okhttp3:logging-interceptor:$okhttpVersion"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation "androidx.test:runner:$androidX"
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
}

Project的build.gradle

buildscript {
    ext.kotlin_version = '1.2.61'
    ext.realmVersion ='5.4.2'
    repositories {
        jcenter()
        maven {
            name 'glide-snapshot'
            url 'http://oss.sonatype.org/content/repositories/snapshots'
        }
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0-alpha07'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "io.realm:realm-gradle-plugin:$realmVersion"
        //classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
        maven { url "https://jitpack.io" }
        maven {
            name 'glide-snapshot'
            url 'http://oss.sonatype.org/content/repositories/snapshots'
        }
        google()
    }

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs <<"-Xmaxerrs" <<"1000"
        }
    }
}

/**
 * Configure common tasks on all the submodules
 */
allprojects { project ->

    // Get versions, this is where we store things
    // like the list of submodules or the version
    project.apply from: "$rootDir/versions.gradle"
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

Edijae Crusa.. 33

经过艰苦奋斗,努力奋斗并在这里和那里寻求帮助后,我发现./gradlew app:dependencies命令提供了重要的输出来解决错误.

首先,错误是 Program type already present: androidx.annotation.AnimRes

Program type already present意味着存在命名冲突,在本例中是androidx.annotation库,它由几个库使用.其他库包含 androidx.annotation library作为传递依赖.要查看这些库,我从项目的根文件夹(我的操作系统是Ubuntu)打开终端并运行./gradlew app:dependencies命令.它产生了一长串配置及其依赖性.以下是摘录.

debugCompileClasspath - Resolved configuration for compilation for variant: debug

+--- androidx.databinding:databinding-common:3.3.0-alpha07
+--- androidx.databinding:databinding-runtime:3.3.0-alpha07
|    +--- androidx.lifecycle:lifecycle-runtime:2.0.0-alpha1 -> 2.0.0-rc01
|    |    +--- androidx.lifecycle:lifecycle-common:2.0.0-rc01
|    |    |    \--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02
|    |    +--- androidx.arch.core:core-common:2.0.0-rc01
|    |    |    \--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02
|    |    \--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02
|    +--- androidx.collection:collection:1.0.0-alpha1 -> 1.0.0-rc02
|    |    \--- androidx.annotation:annotation:1.0.0-rc02
|    \--- androidx.databinding:databinding-common:3.3.0-alpha07
+--- androidx.databinding:databinding-adapters:3.3.0-alpha07
|    +--- androidx.databinding:databinding-common:3.3.0-alpha07
|    \--- androidx.databinding:databinding-runtime:3.3.0-alpha07 (*)

上面的摘录显示了一些debugCompileClasspath配置的依赖关系.我们可以看到它androidx.databinding:databinding-runtime:3.3.0-alpha07包含androidx.annotation:annotation:1.0.0-rc02作为传递依赖.

它还包含androidx.lifecycle:lifecycle-runtime:2.0.0-alpha1哪些包含androidx.annotation:annotation:1.0.0-rc01.

androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02表示1.0.0-rc02将使用版本而不是版本1.0.0-rc01.

下面是另一个来自同一长输出的摘录 ./gradlew app:dependencies

kapt
+--- androidx.lifecycle:lifecycle-compiler:2.0.0-alpha1
|    +--- androidx.lifecycle:lifecycle-common:2.0.0-alpha1
|    |    \--- androidx.annotation:annotation:1.0.0-alpha1
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.41
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.google.auto:auto-common:0.6
|    |    \--- com.google.guava:guava:18.0 -> 23.3-jre
|    |         +--- com.google.code.findbugs:jsr305:1.3.9
|    |         +--- com.google.errorprone:error_prone_annotations:2.0.18
|    |         +--- com.google.j2objc:j2objc-annotations:1.1
|    |         \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    \--- com.squareup:javapoet:1.8.0

从上面我们可以看到androidx.lifecycle:lifecycle-compiler:2.0.0-alpha1包含版本1.0.0-alpha1androidx.annotation:annotation

这意味着最后,我的模块app将有两个版本1.0.0-alpha1,1.0.0-rc02这使得构建失败.

为了解决这个错误,我只是通过在我的应用程序的build.gradle中添加以下代码块来删除传递依赖项

configurations {
    compile.exclude group: 'androidx.annotation', module: 'annotation'
}

所以我的应用程序的build.gradle将如下所示

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'

android {
    //bla bla bla
}

configurations {
    compile.exclude group: 'androidx.annotation', module: 'annotation'
}

dependencies {
// bla bla bla
}

之后,我只是同步,清理和重建我的项目.



1> Edijae Crusa..:

经过艰苦奋斗,努力奋斗并在这里和那里寻求帮助后,我发现./gradlew app:dependencies命令提供了重要的输出来解决错误.

首先,错误是 Program type already present: androidx.annotation.AnimRes

Program type already present意味着存在命名冲突,在本例中是androidx.annotation库,它由几个库使用.其他库包含 androidx.annotation library作为传递依赖.要查看这些库,我从项目的根文件夹(我的操作系统是Ubuntu)打开终端并运行./gradlew app:dependencies命令.它产生了一长串配置及其依赖性.以下是摘录.

debugCompileClasspath - Resolved configuration for compilation for variant: debug

+--- androidx.databinding:databinding-common:3.3.0-alpha07
+--- androidx.databinding:databinding-runtime:3.3.0-alpha07
|    +--- androidx.lifecycle:lifecycle-runtime:2.0.0-alpha1 -> 2.0.0-rc01
|    |    +--- androidx.lifecycle:lifecycle-common:2.0.0-rc01
|    |    |    \--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02
|    |    +--- androidx.arch.core:core-common:2.0.0-rc01
|    |    |    \--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02
|    |    \--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02
|    +--- androidx.collection:collection:1.0.0-alpha1 -> 1.0.0-rc02
|    |    \--- androidx.annotation:annotation:1.0.0-rc02
|    \--- androidx.databinding:databinding-common:3.3.0-alpha07
+--- androidx.databinding:databinding-adapters:3.3.0-alpha07
|    +--- androidx.databinding:databinding-common:3.3.0-alpha07
|    \--- androidx.databinding:databinding-runtime:3.3.0-alpha07 (*)

上面的摘录显示了一些debugCompileClasspath配置的依赖关系.我们可以看到它androidx.databinding:databinding-runtime:3.3.0-alpha07包含androidx.annotation:annotation:1.0.0-rc02作为传递依赖.

它还包含androidx.lifecycle:lifecycle-runtime:2.0.0-alpha1哪些包含androidx.annotation:annotation:1.0.0-rc01.

androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02表示1.0.0-rc02将使用版本而不是版本1.0.0-rc01.

下面是另一个来自同一长输出的摘录 ./gradlew app:dependencies

kapt
+--- androidx.lifecycle:lifecycle-compiler:2.0.0-alpha1
|    +--- androidx.lifecycle:lifecycle-common:2.0.0-alpha1
|    |    \--- androidx.annotation:annotation:1.0.0-alpha1
|    +--- org.jetbrains.kotlin:kotlin-stdlib:1.2.41
|    |    \--- org.jetbrains:annotations:13.0
|    +--- com.google.auto:auto-common:0.6
|    |    \--- com.google.guava:guava:18.0 -> 23.3-jre
|    |         +--- com.google.code.findbugs:jsr305:1.3.9
|    |         +--- com.google.errorprone:error_prone_annotations:2.0.18
|    |         +--- com.google.j2objc:j2objc-annotations:1.1
|    |         \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
|    \--- com.squareup:javapoet:1.8.0

从上面我们可以看到androidx.lifecycle:lifecycle-compiler:2.0.0-alpha1包含版本1.0.0-alpha1androidx.annotation:annotation

这意味着最后,我的模块app将有两个版本1.0.0-alpha1,1.0.0-rc02这使得构建失败.

为了解决这个错误,我只是通过在我的应用程序的build.gradle中添加以下代码块来删除传递依赖项

configurations {
    compile.exclude group: 'androidx.annotation', module: 'annotation'
}

所以我的应用程序的build.gradle将如下所示

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'

android {
    //bla bla bla
}

configurations {
    compile.exclude group: 'androidx.annotation', module: 'annotation'
}

dependencies {
// bla bla bla
}

之后,我只是同步,清理和重建我的项目.


不幸的是,使用Android Studio和Gradle进行的此类错误搜索类似于“神秘之旅”。为何编译器不声明以下内容:“错误;模块A使用lib xxx,而模块B使用lib xxy纠正建议:……”毕竟这是2019年。这些类型的错误是多么费时的事情。
推荐阅读
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
author-avatar
袁冠和堂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有