一、官网
二、什么是gRPC?
官网介绍:
gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services.
三、在Android中使用gRPC
环境配置
一、新建module
在原有的项目里面新建proto文件或者新建一个module都可以,我这边选择新建一个module由主项目引用。
二、引用相关包
com-google-protobuf-protobuf-kotlin-lite3 = { module = "com.google.protobuf:protobuf-kotlin-lite", version.ref = "comGoogleProtobufProtobufKotlinLite" }
grpc-android = { module = "io.grpc:grpc-android", version.ref = "grpcStub" }
grpc-kotlin-stub = { module = "io.grpc:grpc-kotlin-stub", version.ref = "grpcKotlinStub" }
grpc-protobuf-lite = { module = "io.grpc:grpc-protobuf-lite", version.ref = "grpcProtobufLite" }
grpc-stub = { module = "io.grpc:grpc-stub", version.ref = "grpcStub" }
版本号:
comGoogleProtobufProtobufKotlinLite = "4.27.3"
grpcStub = "1.65.1"
grpcProtobufLite = "1.65.1"
grpcKotlinStub = "1.4.1"
或者使用最新版本也可以
引用:
implementation(libs.grpc.stub)
implementation(libs.grpc.protobuf.lite)
implementation(libs.grpc.kotlin.stub)
implementation(libs.com.google.protobuf.protobuf.kotlin.lite3)
implementation(libs.grpc.android)
三、添加proto插件
只在module里面添加就可以
protobuf = { id = "com.google.protobuf", version = "0.9.4" }
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.jetbrains.kotlin.android)
alias(libs.plugins.protobuf)
}
四、添加配置
与plugin同级,同样只放在module里面
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.25.3"
}
plugins {
create("java") {
artifact = "io.grpc:protoc-gen-grpc-java:1.60.2"
}
create("grpc") {
artifact = "io.grpc:protoc-gen-grpc-java:1.60.2"
}
create("grpckt") {
artifact = "io.grpc:protoc-gen-grpc-kotlin:1.4.1" + ":jdk8@jar"
}
}
generateProtoTasks {
all().forEach {
it.plugins {
create("java") {
option("lite")
}
create("grpc") {
option("lite")
}
create("grpckt") {
option("lite")
}
}
it.builtins {
create("kotlin") {
option("lite")
}
}
}
}
}
五、添加过滤META-INF文件夹下的文件
放在android{}里面,主项目和module都要添加
packaging {
resources {
excludes += "/META-INF/*"
}
}
六、添加proto文件
在src/main/文件夹下新建proto目录,添加proto文件,可以直接从服务端的复制过来
目录结构
目录.jpg
七、编译
直接build整个项目或者make project都可以
build成功后会在build目录下生成proto的文件
八、代码调用
新建一个UserClient
EmployeeServiceGrpcKt是上一步build自动生成的类,proto里面定义的service名称+GrpcKt
class UserClient(channel: ManagedChannel) {
private val stub: EmployeeServiceGrpcKt.EmployeeServiceCoroutineStub =
EmployeeServiceGrpcKt.EmployeeServiceCoroutineStub(channel)
suspend fun login(email: String, pwd: String) {
val params = requestLoginParams {
this.name = email
this.password = pwd
}
val response = stub.login(params)
Log.e("UserClient","Received: ${response.data}")
Log.e("UserClient","Received: ${response.data.bio}")
}
}
传入服务器地址和端口号,直接调用即可
object GRPCUtils {
private const val URL = ""
private const val PORT = 80
suspend fun login(cxt: Context, email: String, pwd: String) {
val androidChannel = AndroidChannelBuilder
.forAddress(URL, PORT)
.context(cxt)
.usePlaintext()
.build()
val client = UserClient(androidChannel)
client.login(email, pwd)
}
}
异步调用
CoroutineScope(Dispatchers.IO).launch {
GRPCUtils.login(
this@NewMainActivity,
editText.text.toString(),
pwd.text.toString()
)
}







网友评论