1

我想在同一个 android 应用程序中为客户端和服务器使用接口。用例是在客户端运行的同一个应用程序中运行一个 okhttpmockwebserver 服务 gRPC 请求。为此,我创建了两个库项目,它们具有自己的客户端和服务器线配置,类似于那些

    wire {
        kotlin {
            includes = ['com..caompany.android.proto.*']
            out "${buildDir}/protos"
            rpcCallStyle = 'suspending'
            rpcRole = 'client'
        }
    }
    wire {
        kotlin {
            includes = ['com..company.android.proto.*']
            out "${buildDir}/protos"
            rpcCallStyle = 'suspending'
            rpcRole = 'server'
        }
    }

执行 wire-gradle-plugin 失败并出现以下异常:com.company.android.proto.HelloReply$Companion$ADAPTER$1 被定义了多次。引起:com.android.tools.r8.CompilationFailedException:编译失败,来源:.../com/company/android/proto/HelloReply$Companion$ADAPTER$1.dex

如果电线可以帮助我

  • 一次生成所有类和接口,包括服务器和客户端角色或
  • 排除类文件的生成,只为客户端或服务端生成服务接口

有没有解决方法我可以在没有 gradle 插件支持的情况下获得类似的结果?

4

1 回答 1

1

您可以同时拥有多个kotlin块。如果您两次生成相同的类,Wire 将抛出,因此您需要将规则定义为两者之间的唯一性。您需要一个块来生成客户端角色接口。您需要一个块来生成服务器角色接口。最后,您需要在另一个块中生成常规类型,或者在其中一个块中(但不能同时在两者中)。

像这样的东西

wire {
    kotlin {
        includes = ['all.services.or.package']
        rpcCallStyle = 'suspending'
        rpcRole = 'client'
    }
    kotlin {
        includes = ['all.services.or.package']
        rpcCallStyle = 'suspending'
        rpcRole = 'server'
    }
    kotlin {
        excludes = ['all.services.or.package']
        rpcRole = 'none'
    }
}
于 2021-11-09T16:32:54.223 回答