Android上使用grpc的方法教程

  

  

最近的一个项目使用到了grpc实现跨平台的远程调用,在安卓端使用的时候遇到了一些坑,这里记录一下。

  

首先根据grpc android的官方演示配置grpc依赖,测试它的hello world工程。

  

  

<强>添加rotobuf-gradle-plugin插件

  

首先添加rotobuf-gradle-plugin插件,他是用来从原型文件自动生成java代码的:

     //项目的build.gradle中添加rotobuf-gradle-plugin插件   buildscript {   …   依赖关系{   …   类路径“com.google.protobuf: protobuf-gradle-plugin: 0.8.0”   …   }   …   }         //应用程序的build.gradle中添加下面配置   应用插件:“com.google.protobuf”      protobuf {   protoc {   工件=' com.google.protobuf: protoc: 3.0.0 '   }   插件{   javalite {   工件=" com.google.protobuf: protoc-gen-javalite: 3.0.0 "   }   grpc {   工件=' io.grpc: protoc-gen-grpc-java: 1.0.0 '//CURRENT_GRPC_VERSION   }   }   generateProtoTasks {   所有()。每个{任务→   的任务。插件{   javalite {}   grpc {//选项添加到——grpc_out   选择“lite”   }   }   }   }   }      

添加原型文件并自动生成java代码

  

在src/main/目录下创建一个原型目录,并将官方的helloworld.proto放到原型目录下

  

之后只需要重建一下就能看到生成构建//源/原型/目录下根据<代码> helloworld.proto 生成了几个Java类

  

 Android上使用grpc的方法教程”> <br/>
  </p>
  <p>添加安卓端grpc的依赖</p>
  
  <pre类=//应用程序的build.gradle中添加下面配置   依赖关系{   …   编译“io.grpc: grpc-okhttp: 1.1.2”   编译“io.grpc: grpc-protobuf-lite: 1.1.2”   编译“io.grpc: grpc-stub: 1.1.2”   编译“javax.annotation: javax.annotation-api: 1.2”   …   }            配置。所有{   resolutionStrategy。力“com.google.code.findbugs: jsr305:3.0.1”   }      

我这个时候报了这个错误

        警告:与依赖“com.google.code.findbugs: jsr305”冲突。解决版本应用程序(3.0.0)和测试应用程序(2.0.1)是不同的。见http://g。有限公司/androidstudio/app-test-app-conflict细节。      

这是因为<代码> com.google.code.findbugs: jsr305>   

可以在应用程序的<代码> build.gradle>         android {   …   配置。所有{   resolutionStrategy。力“com.google.code.findbugs: jsr305:3.0.1”   }   …   }      

编写演示代码

        公开课MainActivity延伸AppCompatActivity {   私有静态最终字符串标签=癎rpcDemo”;      私有静态最终int PROT=55055;   私有静态最终字符串名称=" linjw”;   私有静态最终字符串主机=發ocalhost”;      @Override   保护空白>   引起的:io.grpc。ManagedChannelProvider ProviderNotFoundException美元:没有发现功能服务器。尝试添加一个依赖项>   依赖关系{   …   编译“io.grpc: grpc-netty: 1.1.2”   编译“io.grpc: grpc-protobuf-lite: 1.1.2”   编译“io.grpc: grpc-stub: 1.1.2”   编译“javax.annotation: javax.annotation-api: 1.2”   …   }      

这么编译会报错

        com.android.build.api.transform。TransformException: com.android.builder.packaging。DuplicateFileException:复制文件复制的APK meta - inf/INDEX.LIST      

需要加上下面的配置解决

        android {   …   packagingOptions {   pickFirst“meta - inf/INDEX.LIST”   pickFirst“meta - inf/许可证”   pickFirst“meta - inf/io.netty.versions.properties”   }   …   }      

当然,还需要加上互联网权限,要不然运行的时候还是会崩溃。

  

最终就能看的下面的打印,这样安卓grpc的helloworld就成功了。

        03-03 00:04:20.000 6137 - 6137/linjw.com.grpcdemo D/GrpcDemo:你好linjw      

  

任何可以携带任意类型的数据,用法相当于c语言的空指针。在项目中是很常用的,但是谷歌在javalite的版本不支持。

Android上使用grpc的方法教程