【发布时间】:2020-07-27 13:01:20
【问题描述】:
我有两个我自己的 android 库 libA 和 libB,它们使用 protobuf。当我在我的 android 应用程序项目中添加其中一个时,一切都很好,但是如果我同时添加两者,我在构建应用程序项目时会出错:
Duplicate class com.google.api.Advice found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.Advice$1 found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.Advice$Builder found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AdviceOrBuilder found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AnnotationsProto found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AuthProto found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AuthProvider found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AuthProvider$1 found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AuthProvider$Builder found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AuthProviderOrBuilder found in modules classes.jar (libA) and classes.jar (libB)
Duplicate class com.google.api.AuthRequirement found in modules classes.jar (libA) and classes.jar (libB)
.................
我在库项目和应用项目中使用 gradle。 我在应用程序项目中添加库为:
dependencies {
implementation "com.libA"
implementation "com.libB"
}
在这两个库中,我的配置几乎相同:
apply plugin: 'com.android.library'
apply plugin: 'com.google.protobuf'
apply from: rootProject.file("gradle/versions.gradle")
android {
compileSdkVersion versions.sdk.compile
defaultConfig {
minSdkVersion versions.min
targetSdkVersion versions.compile
versionCode versions.code
versionName versions.name
}
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/libs']
}
}
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.6.1"
}
plugins {
javalite {
artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
}
grpc {
artifact = "io.grpc:protoc-gen-grpc-java:1.25.0"
}
}
generateProtoTasks {
all().each { task ->
task.plugins {
task.builtins {
remove java
}
javalite {}
grpc {
// Options added to --grpc_out
option 'lite'
}
}
}
}
}
dependencies {
protobuf "com.google.protobuf:protobuf-lite:3.0.1"
protobuf "com.google.api.grpc:proto-google-common-protos:1.12.0"
implementation "io.grpc:grpc-okhttp:1.25.0"
implementation "io.grpc:grpc-protobuf-lite:1.25.0"
implementation "io.grpc:grpc-stub:1.25.0"
//other dependencies
}
结果我在两个依赖项中都有相同的类(其中一个是screenshort),这会引发重复错误: libraries
排除组/模块没有帮助。 我该如何解决这个问题?
【问题讨论】:
标签: android gradle conflicting-libraries