2

I am in the middle of migrating to androidX and blocked by this exception.

AGPBI: {"kind":"error","text":"Program type already present: 
android.support.v4.media.MediaBrowserCompat$ConnectionCallback$StubApi21",
"sources":[{}],"tool":"D8"}

This is how my app's dependencies looks like,

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.adobe.mobile:adobeMobileLibrary:4.17.2'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.browser:browser:1.0.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
    implementation 'androidx.lifecycle:lifecycle-common-java8:2.1.0'
    implementation 'com.jakewharton.timber:timber:4.5.1'
    implementation "com.squareup.retrofit2:retrofit:${retrofitLibraryVersion}"
    implementation "com.squareup.retrofit2:converter-gson:${retrofitLibraryVersion}"
    implementation "com.squareup.retrofit2:adapter-rxjava2:${retrofitLibraryVersion}"
    implementation "com.squareup.okhttp3:logging-interceptor:${okHttpLibraryVersion}"
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.5'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.github.bumptech.glide:glide:3.8.0'
    implementation "org.bouncycastle:bcprov-jdk15on:${bouncyCastleVersion}"
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    implementation 'com.google.dagger:dagger:2.10'
    implementation 'com.airbnb.android:lottie:2.7.0'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.10'
    implementation 'com.airbnb.android:lottie:2.7.0'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
    implementation 'com.google.firebase:firebase-core:16.0.7'
    implementation "com.google.firebase:firebase-messaging:17.4.0"
    implementation 'com.scottyab:rootbeer-lib:0.0.7'

    testImplementation 'junit:junit:4.12'
    testImplementation 'org.mockito:mockito-core:2.7.5'
    testImplementation "com.squareup.okhttp3:mockwebserver:${okHttpLibraryVersion}"
    testImplementation 'commons-codec:commons-codec:1.11'
    testImplementation 'pl.pragmatists:JUnitParams:1.1.1'

    androidTestImplementation 'org.apache.commons:commons-lang3:3.5'

    androidTestImplementation('androidx.test:runner:1.1.0') {
        exclude group: 'com.android.support', module: 'support-annotations'
    }
    androidTestImplementation('androidx.test:rules:1.1.0') {
        exclude group: 'com.android.support', module: 'support-annotations'
    }

    androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    androidTestImplementation('androidx.test.espresso:espresso-intents:3.1.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    androidTestImplementation('androidx.test.espresso:espresso-contrib:3.1.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'appcompat-v7'
        exclude group: 'com.android.support', module: 'design'
        exclude group: 'com.android.support', module: 'recyclerview-v7'
    })
    androidTestImplementation 'org.mockito:mockito-core:2.7.5'
    androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.2.0'
    androidTestImplementation "com.squareup.okhttp3:mockwebserver:${okHttpLibraryVersion}"

}

I already tried to exclude this module like below,

exclude group: 'com.android.support', module: 'support-media-compat'

Really not sure about this, as excluding like this, may break the features during runtime.

Any suggestions would be appreciated.

Prasanna Narshim
  • 778
  • 10
  • 14

2 Answers2

0

1). The first step should be, get the dependency graph/tree using,

gradlew app:dependencies --scan 

(app is the module name in my case)

2). then figure out, which one is using the affected module, in my case, it is support-compat & support-media-compat in firebase-core dependency

Excluding the affected module, helps me to compile, but it is crashing as the excluded module is used at the run time, so that’s not the right thing.

3). The trick here is, update all the dependencies to the latest version.

Once you migrated to the AndroidX, if you are getting compilation error, make a note of it, just commenting out those lines, actually helps you to compile but that’s not the right way. You need to see whether the affected dependency is migrated to AndroidX or still using support libraries instead.

You can't do much if the affected dependency is not yet migrated to AndroidX., if the dependency is generating code that uses support libraries

Prasanna Narshim
  • 778
  • 10
  • 14
  • *You can't do much if the affected dependency is not yet migrated to AndroidX.* this is only true if the dependency is generating code that uses support libraries. Jetifier handles everything else – Tim Sep 30 '19 at 15:19
0

I solved this problem by adding this line into Gradle. Google Document

implementation "androidx.media:media:1.1.0"
Yoshimitsu
  • 4,343
  • 2
  • 22
  • 28