在同一等级的项目中,需要连线来发送客户端和服务器的接口



我想在同一个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插件失败,出现以下异常:com.company.android.proto.HelloReply$Companion$ADAPTER$1定义了多次。引起原因:com.android.tools.r8.CompilationFailedException:编译未能完成,来源:/com/company/android/proto/HelloReply$Companion$ADAPTER$1.dex

如果电线可以

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

有没有一种变通方法可以在没有gradle插件支持的情况下实现类似的结果?

您可以同时拥有多个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'
}
}

最新更新