Кинжал, генерирующий дубликаты классов `XXXDialogFragment_MembersInjector` в приложении Android (тип программы уже присутствует) - PullRequest
0 голосов
/ 02 июня 2019

У меня есть BaseDialogFragment, который использует внедрение зависимостей с помощью Dagger, а затем у меня есть два разных модуля, которые подклассов BaseDialogFragment.

При попытке построить я получаю следующую ошибку:

> Task :app:transformClassesWithDexBuilderForDevelopmentDebug
AGPBI: {"kind":"error","text":"Program type already present: BaseDialogFragment_MembersInjector","sources":[{}],"tool":"D8"}

> Task :app:transformDexArchiveWithDexMergerForDevelopmentDebug FAILED
java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 

Я искал свой проект, и оказалось, что генерируется только два разных BaseDialogFragment_MembersInjector класса: по одному в каждом соответствующем модуле.

У меня уже есть:

  1. Очистил проект
  2. Удалил сгенерированный дубликат класса
  3. Недействительные кэши и перезапущены
  4. Обновлена ​​версия Dagger
  5. Гарантировано, что установлена ​​multidexEnabledв значение true
  6. Добавлено необязательное поле @inject для базового класса для найденной рекомендации здесь

android.gradle:

android {
    compileSdkVersion "$android_compile_version".toInteger()
    defaultConfig {
        minSdkVersion "$android_min_sdk".toInteger()
        targetSdkVersion "$android_target_sdk".toInteger()
        versionCode = 1
        versionName = "1.0"
        manifestPlaceholders = rootProject.ext.manifestPlaceholders

        renderscriptTargetApi 17

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }

    packagingOptions {
        exclude "META-INF/DEPENDENCIES"
        exclude "META-INF/NOTICE"
        exclude "META-INF/LICENSE"
        exclude "META-INF/LICENSE.txt"
        exclude "META-INF/NOTICE.txt"
        exclude "META-INF/maven/com.google.guava/guava/pom.properties"
        exclude "META-INF/maven/com.google.guava/guava/pom.xml"
        exclude "LICENSE.txt"
        exclude ".readme"
    }

    signingConfigs {
        debug {
            storeFile file("${rootProject.projectDir}/keystores/debug.keystore")
        }
        release {
            storeFile file("/opt/android-keystore/youversion.keystore")
            storePassword "youversion"
            keyAlias System.getenv("CERT_USER")
            keyPassword System.getenv("CERT_PASS")
        }
    }

    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            testCoverageEnabled coverage
            if (project.name == "app") {
                proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
                testProguardFiles getDefaultProguardFile("proguard-android.txt"), "test-proguard-rules.pro"
            }
            multiDexKeepProguard file("${rootProject.projectDir}/config/proguard/test-proguard-keep.pro")
            signingConfig signingConfigs.debug
            ext.enableCrashlytics = false
            matchingFallbacks = ['release']
        }
        release {
            debuggable false
            minifyEnabled project.name == "app"
            shrinkResources project.name == "app"
            if (project.name == "app") {
                proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            }
            signingConfig signingConfigs.release
        }
    }

    testOptions {
        animationsDisabled true
    }

    dataBinding {
        enabled true
    }

    lintOptions {
        lintConfig file("$rootProject.projectDir/config/lint/default.xml")
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    useLibrary "org.apache.http.legacy"
}

dependencies.gradle:

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines"

    if (project.parent?.name == "modules" && project.name != "base") {
        implementation project(":modules:base")
    }

    implementation("youversion.red:red-android:$red_red_version@aar") {
        exclude group: "com.squareup.okhttp"
        exclude group: "com.squareup.okio"
        exclude group: "com.google.firebase"
        exclude group: "com.google.android.gms"
        exclude group: "com.facebook.android"
        exclude group: "com.android.support"
    }
    implementation("youversion.red:api-android:$red_api_version@aar") {
        exclude group: "com.squareup.okhttp"
        exclude group: "com.squareup.okio"
        exclude group: "com.google.firebase"
        exclude group: "com.google.android.gms"
        exclude group: "com.facebook.android"
        exclude group: "com.android.support"
    }
    implementation("youversion.red:achievements-android:$red_api_version@aar") {
        exclude group: "com.squareup.okhttp"
        exclude group: "com.squareup.okio"
        exclude group: "com.google.firebase"
        exclude group: "com.google.android.gms"
        exclude group: "com.facebook.android"
        exclude group: "com.android.support"
    }

    // TODO: pull this from red:red
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.11.0-LC2") {
        exclude group: "org.jetbrains.kotlin"
    }

    // brotli
    implementation "org.brotli:dec:$brotli_version"

    // wire
    implementation "com.squareup.wire:wire-runtime:2.3.0-RC1"

    // arch
    implementation "android.arch.lifecycle:extensions:$app_arch_version"
    implementation "android.arch.persistence.room:runtime:$app_arch_version"

    // flurry
    implementation "com.flurry.android:analytics:$flurry_version@aar"

    // proto
    implementation("youversion.android:protobuf:$bible_proto_version@aar") {
        exclude group: "com.google.code.findbugs"
        exclude group: "com.squareup.okio"
        exclude group: "com.squareup.okhttp3"
        exclude group: "com.google.android.gms"
        exclude group: "com.facebook.android"
        exclude group: "com.android.support"
        exclude group: "com.github.bumptech.glide"
        exclude group: "com.google.firebase"
        exclude group: "com.android.databinding"
        exclude group: "com.google.dagger"
        exclude group: "android.arch.lifecycle"
        exclude group: "android.arch.persistence.room"
    }

    // nuclei
    api("nuclei.android:nuclei-android:$nuclei_version") {
        exclude group: "com.android.support"
        exclude group: "com.google.android.gms"
        exclude group: "com.google.android.exoplayer"
        exclude group: "com.squareup.okhttp3"
    }
    api("nuclei3.android:nuclei-android:$nuclei3_version") {
        exclude group: "com.android.support"
        exclude group: "com.google.android.gms"
        exclude group: "com.google.android.exoplayer"
        exclude group: "com.squareup.okhttp3"
    }

    implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
    implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
    androidTestImplementation("com.squareup.okhttp3:mockwebserver:$okhttp_version") {
        exclude group: "com.android.support", module: "multidex"
    }
    implementation "com.squareup.sqldelight:android-driver:$sqldelight_version"
    implementation "com.android.support:multidex:$support_multidex_version"

    // play services
    implementation "com.google.android.gms:play-services-auth:$play_services_auth_version"
    implementation "com.google.android.gms:play-services-maps:$play_services_maps_version"
    implementation "com.google.android.gms:play-services-cast-framework:$play_services_cast_version"
    implementation "com.google.android.gms:play-services-base:$play_services_base_version"

    // android support libraries
    implementation "com.android.support:appcompat-v7:$support_lib_version"
    implementation "com.android.support:support-v4:$support_lib_version"
    implementation "com.android.support:design:$support_lib_version"
    implementation "com.android.support:cardview-v7:$support_lib_version"
    implementation "com.android.support:recyclerview-v7:$support_lib_version"
    implementation "com.android.support:gridlayout-v7:$support_lib_version"
    implementation "com.android.support:palette-v7:$support_lib_version"
    implementation "com.android.support:customtabs:$support_lib_version"
    implementation "com.android.support:mediarouter-v7:$support_lib_version"
    implementation "com.android.support:support-dynamic-animation:$support_lib_version"
    implementation "com.android.support.constraint:constraint-layout:$constraint_layout_version"
    implementation "com.android.support:preference-v14:$support_lib_version"

    // firebase
    implementation "com.google.firebase:firebase-messaging:$firebase_messaging_version"
    implementation "com.google.firebase:firebase-invites:$firebase_invites_version"
    implementation "com.google.firebase:firebase-appindexing:$firebase_app_indexing_version"
    implementation "com.google.firebase:firebase-perf:$firebase_perf_version"

    // appboy
    //implementation files("libs/appboy-mini.jar")
    implementation "com.appboy:android-sdk-base:$appboy_version@aar"

    // apps flyer
    implementation "com.appsflyer:af-android-sdk:$apps_flyer_version@aar"

    // glide image library
    implementation ("com.github.bumptech.glide:glide:$glide_version") {
        exclude group: "com.android.support"
    }
    // glide okhttp module
    implementation ("com.github.bumptech.glide:okhttp-integration:$glide_version") {
        exclude group: "com.squareup.okhttp3", module: "okhttp"
    }

    // facebook support libraries
    implementation "com.facebook.android:facebook-android-sdk:$facebook_version"

    // crashlytics
    implementation("com.crashlytics.sdk.android:crashlytics:$crashlytics_version@aar") {
        transitive = true
    }

    // dagger
    implementation("com.google.dagger:dagger:$dagger_version") {
        exclude group: "com.google.code.findbugs"
    }
    implementation("com.google.dagger:dagger-android:$dagger_version") {
        exclude group: "com.google.code.findbugs"
    }
    implementation("com.google.dagger:dagger-android-support:$dagger_version") {
        exclude group: "com.google.code.findbugs"
    }

    kapt "com.google.dagger:dagger-android-processor:$dagger_version"
    kapt "com.google.dagger:dagger-compiler:$dagger_version"

    // arch apt
    kapt "android.arch.lifecycle:compiler:$app_arch_version"
    kapt "android.arch.persistence.room:compiler:$app_arch_version"

    // branch
    implementation "io.branch.sdk.android:library:$branch_version"

    // Testing-only dependencies
    androidTestImplementation project(":modules:tests")
    androidTestImplementation "androidx.test:core:$android_test_core"
    androidTestImplementation "androidx.test:runner:$android_test_runner"
    androidTestImplementation "androidx.test.espresso:espresso-core:$android_espresso_core"
}


Я также рассмотрел эту проблему здесь - не уверен, что она связана, но звучит похоже.

Может кто-нибудь сказать мне, что здесь происходит?Спасибо за помощь.

1 Ответ

0 голосов
/ 02 июня 2019

Добавить multiDexEnabled true в вашем defaultConfig на уровне приложения.

  defaultConfig 
    {
     ......
     multiDexEnabled true  
     .....   
    }
...