【问题标题】:Duplicated classes from two libraries in android projectandroid项目中两个库的重复类
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多