我得到
“程序类型已存在: 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,并且还引用了更多链接,但仍然没有得到任何解决方案。
答案 0 :(得分:0)
我遇到了类似的问题,这是由于在我的一个项目依赖项中使用了不同版本的protobuf库引起的。
运行命令gradle dependencies
以查看所有依赖项。
我通过删除protobuf依赖性并仅保留一个版本解决了该问题。