当前位置: 首页 > news >正文

绵阳远腾建设网站深圳到北京

绵阳远腾建设网站,深圳到北京,有哪些平面设计网站,扬州网站建设suteng本篇文章使用的IDE是Android Studio。这里先吐槽一句#xff0c;安卓项目搭建grpc环境#xff0c;不管是引入插件还是引入第三方库#xff0c;对于版本的要求都极为苛刻#xff0c;一旦版本不匹配就会报错#xff0c;所以对于版本的搭配一定要注意。 下面介绍的这个版本搭…本篇文章使用的IDE是Android Studio。这里先吐槽一句安卓项目搭建grpc环境不管是引入插件还是引入第三方库对于版本的要求都极为苛刻一旦版本不匹配就会报错所以对于版本的搭配一定要注意。 下面介绍的这个版本搭配是我研究好久好久才跑通的这在我的电脑上是一组可行的配置如果你使用了同样的配置跑不通那可能是环境中某一部分还是有不同的地方需要你自己再去找一下解决问题的办法那么话不多说直接上配置吧。 各种配置文件 首先我们需要设置三个配置文件如下图所示 我们先来看一下项目设置setting.gradle按照我的理解这里应该是设置一些gradle仓库地址还有项目中包含的模块等等信息。 我的配置是这样写的 pluginManagement {repositories {gradlePluginPortal()google()mavenCentral()} } dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {google()mavenCentral()maven { url https://jitpack.io }maven { url https://repo.eclipse.org/content/repositories/paho-releases/}} } rootProject.name grpc_project_plus include :app接着是项目的的build.gradle这里面需要引入一些插件和进行gradle版本设置其中gradle版本设置也是一个坑版本号要设置对才行 buildscript {repositories {maven{ url https://maven.aliyun.com/repository/jcenter}maven { url https://maven.aliyun.com/repository/google }maven { url https://maven.aliyun.com/repository/gradle-plugin }maven { url https://maven.aliyun.com/repository/public }google()mavenCentral()}dependencies {classpath com.android.tools.build:gradle:7.2.0classpath com.google.protobuf:protobuf-gradle-plugin:0.8.17} }task clean(type: Delete) {delete rootProject.buildDir } 从上面的配置中我们可以看出我们使用的gradle插件的版本是7.2.0然后配置的gradle版本是7.4具体的设置方法就是到gradle的配置文件中指定 当然也有一个简单的办法就是到project structure中去指定 上面这张图按照我的理解上面是插件的版本号下面就是gradle的版本号这两个不对应的话容易出问题这里顺便说一下我的Android Studio的版本应该是2021.3.1就是海豚的图标。经过这次的环境搭建我现在对于版本号真的非常敏感调版本号真的太折磨人了 最后就是模块的build.gradle我找到的一个能跑通demo的设置如下 plugins {id com.android.applicationid com.google.protobuf }android {namespace com.example.grpc_project_pluscompileSdk 32defaultConfig {applicationId com.example.grpc_project_plusminSdk 29targetSdk 32versionCode 1versionName 1.0testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}configurations.all {resolutionStrategy.force com.google.code.findbugs:jsr305:3.0.1exclude group: com.google.guava, module: listenablefuture}sourceSets {main {proto {srcDir src/main/proto}}}packagingOptions {pickFirst META-INF/INDEX.LISTpickFirst META-INF/LICENSEpickFirst META-INF/io.netty.versions.properties} }protobuf {protoc {artifact com.google.protobuf:protoc:3.17.2}plugins {/*javalite {artifact com.google.protobuf:protoc-gen-javalite:3.0.0}*/grpc {artifact io.grpc:protoc-gen-grpc-java:1.39.0 // CURRENT_GRPC_VERSION}}generateProtoTasks {all().each { task -task.builtins {java { option lite }}task.plugins {grpc { // Options added to --grpc_outoption lite }}}} }dependencies {implementation androidx.appcompat:appcompat:1.4.1implementation com.google.android.material:material:1.5.0implementation androidx.constraintlayout:constraintlayout:2.1.3testImplementation junit:junit:4.13.2androidTestImplementation androidx.test.ext:junit:1.1.3androidTestImplementation androidx.test.espresso:espresso-core:3.4.0/*implementation io.grpc:grpc-okhttp:1.1.2implementation io.grpc:grpc-netty:1.1.2implementation io.grpc:grpc-protobuf-lite:1.1.2implementation io.grpc:grpc-stub:1.1.2implementation javax.annotation:javax.annotation-api:1.2*/// You need to build grpc-java to obtain these libraries below.implementation io.grpc:grpc-netty:1.39.0implementation io.grpc:grpc-okhttp:1.39.0 // CURRENT_GRPC_VERSIONimplementation io.grpc:grpc-protobuf-lite:1.39.0 // CURRENT_GRPC_VERSIONimplementation io.grpc:grpc-stub:1.39.0 // CURRENT_GRPC_VERSIONimplementation org.apache.tomcat:annotations-api:6.0.53 } 编写proto文件并编译 配置好了上述环境后我们需要编译proto文件。 首先在main目录下新建一个文件夹proto然后编写hello.proto文件。 文件的内容如下 syntax proto3;option java_multiple_files true; option java_package io.grpc.examples.helloworld; option java_outer_classname HelloWorldProto; option objc_class_prefix HLW;package helloworld;// The greeting service definition. service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {} }// The request message containing the users name. message HelloRequest {string name 1; }// The response message containing the greetings message HelloReply {string message 1; } 这是一个简单的grpc接口调用具体的语法我就不说了这篇文章主要是讲环境搭建。 接着编译项目如果编译成功的话可以在build文件夹中看到grpc相关的java文件。 编写简单的demo代码 这是最后一步在主Activity中编写简单的客户端和服务端代码测试grpc服务是否可以正常使用。 public class MainActivity extends AppCompatActivity {private static final String TAG GrpcDemo;private static final int PROT 56322;private static final String NAME hello world;private static final String HOST localhost;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d(TAG, start);startServer(PROT);Log.d(TAG, start server.);startClient(HOST, PROT, NAME);Log.d(TAG, start client.);}private void startServer(int port){try {NettyServerBuilder.forPort(port).addService(new GreeterImpl()).build().start();} catch (IOException e) {e.printStackTrace();Log.d(TAG, e.getMessage());}}private void startClient(String host, int port, String name){ManagedChannel mChannel ManagedChannelBuilder.forAddress(host, port).usePlaintext().build();GreeterGrpc.GreeterStub stub GreeterGrpc.newStub(mChannel);HelloRequest message HelloRequest.newBuilder().setName(name).build();stub.sayHello(message, new StreamObserverHelloReply() {Overridepublic void onNext(HelloReply value) {//Log.d(TAG, sayHello onNext.);Log.d(TAG, value.getMessage());}Overridepublic void onError(Throwable t) {Log.d(TAG, sayHello onError.);}Overridepublic void onCompleted() {Log.d(TAG, sayHello onCompleted.);}});}private class GreeterImpl extends GreeterGrpc.GreeterImplBase {public void sayHello(HelloRequest request, StreamObserverHelloReply responseObserver) {responseObserver.onNext(sayHello(request));responseObserver.onCompleted();}private HelloReply sayHello(HelloRequest request) {return HelloReply.newBuilder().setMessage(request.getName()).build();}}} 然后需要在AndroidManifest.xml文件中添加网络权限 ?xml version1.0 encodingutf-8? manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsuses-permission android:nameandroid.permission.INTERNET/applicationandroid:allowBackuptrueandroid:dataExtractionRulesxml/data_extraction_rulesandroid:fullBackupContentxml/backup_rulesandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:themestyle/Theme.Grpc_project_plustools:targetApi31activityandroid:name.MainActivityandroid:exportedtrueintent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filtermeta-dataandroid:nameandroid.app.lib_nameandroid:value //activity/application/manifest 运行上述代码如果能在控制台看到下面的这句话就说明环境搭建成功了。 结语 这次的环境搭建真的非常艰难前前后后遇到了各种问题。不得不说安卓编程对于版本太敏感了只要有一个版本没有对应上项目都可能跑不通。 如果你遇到了什么问题欢迎在评论区交流大家一起总结问题少踩坑共勉
http://www.dnsts.com.cn/news/45153.html

相关文章:

  • 学校网站建设的申请wordpress页面编辑乱码
  • 开o2o网站需要什么手续企业cms免费
  • wordpress注明网站黄山网络推广公司
  • 阿坝网站设计给单位建设网站
  • 减肥单页网站江门恒达互联网网站建设
  • 网站是空间备案南宁专业网站建设公司
  • python做网站挣钱乐清市网站建设
  • 关于公司网站建设情况的汇报台州路桥做网站的公司有哪些
  • 建网站的流程和费用我要发布信息
  • 花万元请人做网站西安大网站建设公司排名
  • 台州网站排名优化价格领卷网站如何做代理
  • 做同款的网站搬瓦工暗转wordpress
  • 深圳网站设计是什么做简历好的网站
  • 做网站是要写代码的吗使用jquery的网站
  • wordpress多语言建站网站根目录下
  • wap卖料建站系统新网网站后台登陆
  • 网站建设教材下载上海资讯
  • 西部数码网站模板各种网站开发工具
  • 天津宏宇网站建设关于网站建设的广告语
  • 好用的网站推荐世界上网站做的好的例子
  • 成都网站建设服务密需湖南岚鸿案例青岛谁优化网站做的好
  • 石台做网站网站里的轮廓图 怎么做的
  • 会员可见的网站开发h5网站的好处
  • 百度 验证网站wordpress gzip压缩
  • 河北建设行业信息网站建设网站的主要流程图
  • 影响网站排名原因网站建设得多钱
  • 网站建设外包公司建站软件免费版下载
  • 哪个网站可以做加工重庆安全建设工程信息网
  • 站群系统源码山乙建设公司网站
  • 学校建设网站费用申请青岛市建设工程管理信息网