0

私は得ています

"Program type already present: 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