0

我正进入(状态

“程序类型已经存在:com.google.protobuf.AbstractMessageLite$Builder$LimitedInputStream”运行时错误。我尝试使用 multidix 并且还引用了更多链接,但仍然没有得到任何解决方案。

这是因为在 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')

由于这个原因,在 jar 文件中生成相同的 java 类我可能会收到此错误“程序类型已存在”

我已经尝试过multidex,排除代码但它都不起作用

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'
            }
        }
    }
}

我已经尝试使用 multidix 并且还引用了更多链接,但仍然没有得到任何解决方案。

4

1 回答 1

0

我遇到了类似的问题,这是由于在我的一个项目依赖项中使用了不同版本的 protobuf 库引起的。

运行命令gradle dependencies以查看所有依赖项。

我通过删除我的 protobuf 依赖项并仅保留一个版本解决了这个问题。

于 2019-06-05T18:12:21.050 回答