Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

com.android.tools.r8.errors.CompilationError: Program type already present: androidx.annotation.AnimRes

I'm trying to rebuild my project which I've written in kotlin but it has constantly failed with the error

Program type already present: androidx.annotation.AnimRes 

I've tried

  • Invalidating cache

  • cleaning and rebuilding

  • using ./gradlew build --stacktrace --info command

but without success.

Exception is

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

Stack trace is

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 

My app's build.gradle is

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's 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 } 
like image 681
Edijae Crusar Avatar asked Aug 24 '18 10:08

Edijae Crusar


1 Answers

After struggling and struggling and looking for help here and there, I discovered that ./gradlew app:dependencies command was providing important output to solve the error.

First of all, the error is Program type already present: androidx.annotation.AnimRes

Program type already present means there is a naming conflict, and in this case the androidx.annotation library, which is use by several libraries.That is other libraries contain androidx.annotation library as a transitive dependency. To see this libraries, i opened the terminal from my project's root folder(my OS is Ubuntu) and run ./gradlew app:dependencies command. It produced a long list of configurations and their dependences. below is an extract.

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 (*) 

The above extract shows some of dependencies for debugCompileClasspath configuration.We can see that androidx.databinding:databinding-runtime:3.3.0-alpha07 contains androidx.annotation:annotation:1.0.0-rc02 as a transitive dependency.

It also contains androidx.lifecycle:lifecycle-runtime:2.0.0-alpha1 which in turns contain androidx.annotation:annotation:1.0.0-rc01.

androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0-rc02 means that version 1.0.0-rc02 will be used instead of version 1.0.0-rc01 .

Below is another extract from the same long output produced by ./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 

From the above, we can see that androidx.lifecycle:lifecycle-compiler:2.0.0-alpha1 contains version 1.0.0-alpha1 of androidx.annotation:annotation

This means at the end, my module app will have two versions 1.0.0-alpha1 and 1.0.0-rc02 which makes build to fail.

To solve this error, i just removed the transitive dependencies by adding the below block of code in my app's build.gradle

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

So my app's build.gradle will look like this

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 } 

After that, i just synced,cleaned and rebuild my project.

like image 151
Edijae Crusar Avatar answered Oct 12 '22 06:10

Edijae Crusar