从 android 项目的两个库中复制 类

Duplicated classes from two libraries in android project

我有两个我自己的 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 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 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 
}

结果我在两个依赖项中有相同的 类(截屏其中一个),这会引发重复错误: libraries

排除 group/module 没有帮助。 我该如何解决这个问题?

我找到了解决办法。我创建了第三个仅包含生成器的库,并将其作为依赖项添加到我的 libA 和 libB 中。这不是完全正确的架构解决方案,但到目前为止它是有效的。我会努力寻找最佳解决方案。