protobuf 安装_Flutter中TCP通信——Protobuf安装和使用

c3279e05cc2a7b999564fdc4954e4294.png

一.简介

flutter中使用protobuf的话,需要将proto文件转化成dart文件,我们需要借助官方编译工具进行编译。

二.安装protobuf

官放说Protocol Compiler是用C++编写的,使用它需要具备C++环境

安装C++:

sudo apt-get install autoconf automake libtool curl make g++ unzip

安装ProtoBuf发行版:

如果你的是源码版,需要自己在编译一下

git clone https:// github.com/protocolbuff ers/protobuf.git #下载源码
cd protobuf
git submodule update --init --recursive
./autogen.sh

发行版地址:

Releases · protocolbuffers/protobuf​github.com
3f42d36b0f4e9958d08e4014e07c3a14.png

63e9bc6fdfa5dad18012d8e64d2a9ab4.png

需要去下载对应的源码包,由于没有dart的包,我直接下载all包

8b73937544f0f16aefea6d38af4a42d3.png

下载完成之后,解压,进到目录中执行下面命令编译安装

 ./configure
 make
 make check
 sudo make install
 sudo ldconfig # refresh shared library cache.

这样Protocol Compiler就安装完成了

a6e9b1b5b7e8d6201e1dc91f59cd499b.png

OK,我先试试,直接生成dart文件可不可以

10ea83dcfba5d9eaab90fa3e791b0867.png

GG,果然提示我们没有安装protoc-gen-dart插件,不慌,还在掌握之中,想要编成dart的话,是比编译成java麻烦一点点,编译成java直接下载个protobuf-java的包,执行命令就好了,但是dart的话,需要插件,那下面去下载dart-lang插件

dart-lang/protobuf​github.com
82a3d1a1247c42e1c228dba5554bf4f4.png

67fb621a232b4c83540b620bea9b72ca.png

下载完成之后,要执行

dart pub global activate protoc_plugin

如果你没有安装dart和pub环境,这条命令是无法执行成功的,但是插件编译还依赖dart环境

所以先去安装dart环境

获取 Dart SDK​dart.cn
a24f485f085ad05f33844fa5bc15bb4b.png

按照官网命令行安装就好了,但是网络原因,我apt有问题,所以我用deb安装

sudo dpkg -i dart_2.10.4-1_amd64.deb
export PATH="$PATH:/usr/lib/dart/bin"
dart --version

e42fb7615696206fe25fc43dcca20f21.png

这样dart就安装好了,下面 pub清华源

Tsinghua Open Source Mirror​mirror.tuna.tsinghua.edu.cn
60cb752f56c7454a9dcc80161032404b.png

然后,我们执行dart pub global activate protoc_plugin

59f8c025e2109064b8e367109f335833.png

如果出现:

77ae350d4531955279216173c86404bf.png

直接执行:

export PATH="$PATH":"$HOME/.pub-cache/bin"

然后重新Pub install就好了

截至到这时,我们支持编译成dart的protobuf算是安装完成了

三.使用

先搞个.proto文件试试,能不能生成dart文件

63af1761ce78b6308bf2bc565bf93878.png

好像生成成功了

f6e01b9d6da942fed7b7e9f10684bd3b.png

果然成功了,这下就弥补了公司转化protobuf的python脚本中不能转化dart的空白,等回头把这玩意加到公司的python脚本中,就完美了,也不算浪费了我两小时。

这四个文件都有自己不同的作用,只需要引用自己需要的就可以了,也可以全部引入,你要是讲究,我记得protobuf应该有参数设置。

代码中使用:

把生成好的文件复制到代码中

ac220d5caf9460cbad164b0b2acad790.png

引入插件

protobuf: ^1.1.0  #使用protobuf

调用

import 'package:flutterrobot/protobuf/b.pb.dart';

···  例子:我的b.pb.dart文件中放的是person类
    var p1 = person.create();
    p1.age=10;
    p1.country="100";
    var writeToBuffer = p1.writeToBuffer();
    print(writeToBuffer);

    var p2 = person.fromBuffer(writeToBuffer);
    print("年龄:${p2.age}");

···

输出:

a88f3c2bc0096a15e9f1f36a97c44b96.png

OK,完美,后续搭配之前的tcp通讯和自定义协议的格式,最后在放个CRC校验,一个数据帧就这样完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值