私は得ています
"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 を使用してみましたが、より多くのリンクも参照しましたが、まだ解決策が得られませんでした。