com.android.tools.r8.errors.CompilationError: Тип программы уже существует: com.google.protobuf.AbstractMessageLite $ Builder $ LimitedInputStream - PullRequest
0 голосов
/ 05 января 2019

Я получаю

"Тип программы уже присутствует: com.google.protobuf.AbstractMessageLite $ Builder $ LimitedInputStream» ошибка во время выполнения. Я пытался использовать мультидикс, а также ссылался больше ссылок но все еще не получил никаких решений.

Это потому, что в файлах protobuf lite и protobuf jar одного и того же класса. Моя зависимость равна

    protobuf {
        protoc {
            artifact = 'com.google.protobuf:protoc:3.6.1'
        }
        plugins {
            grpc {
                artifact = 'io.grpc:protoc-gen-grpc-java:1.0.0-pre2'
            }
            javalite {
                artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
            }
        }
        generateProtoTasks {
            all()*.plugins {
                javalite {}
            }
            ofNonTest()*.plugins {
                grpc {
                    // Options added to --grpc_out
                    option 'lite'
                }
            }
        }
    }

    dependencies {
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support:design:27.1.1'
        implementation 'com.android.support:multidex:1.0.3'
        //  GRPC dependencies
        implementation 'javax.annotation:javax.annotation-api:1.3.2'
        implementation 'io.grpc:grpc-protobuf-lite:1.14.0'
        implementation 'io.grpc:grpc-okhttp:1.14.0'
        implementation 'io.grpc:grpc-stub:1.14.0'
        implementation files('libs/protobuf-java-3.6.1.jar')

    }

Поскольку мой библиотечный файл и плагин protobuf оба ниже

artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
 implementation files('libs/protobuf-java-3.6.1.jar')

генерирует тот же класс Java в там JAR-файле из-за этого я могу получить эту ошибку "Тип программы уже присутствует"

Я пробовал мультидекс, исключить код, но все не работает

android {
    compileSdkVersion 27

    defaultConfig {
        applicationId "io.grpc.helloworldexample"
        // API level 14+ is required for TLS since Google Play Services v10.2
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

    }
    buildTypes {
        debug { minifyEnabled false }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        disable 'GoogleAppIndexingWarning', 'HardcodedText', 'InvalidPackage'
        textReport true
        textOutput "stdout"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }


    sourceSets {
        main {
            java {
                exclude '**/AbstractMessageLite.java'
            }
        }
    }
}

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

1 Ответ

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

У меня была похожая проблема, и она была вызвана использованием другой версии библиотеки protobuf в одной из моих зависимостей проекта.

Запустите команду gradle dependencies, чтобы увидеть все зависимости.

Я решил проблему, удалив свою зависимость от protobuf и сохранив только одну версию.

...