protobuf的安装

[toc]

protobuf-iOS简单总结(编译、环境搭建)

使⽤Protobuf\ 可以⽐json的数据量⼩⾄少⼀个数量级。

一、Protobuf介绍

新项目打算使用新的序列化数据结构协议,即Protobuf(Google)。之前网络通信和通用数据 交换等应用场景中最常用的就是JSON和XML。Protobuf相较于两者,其效率、兼容性更为出 色。

Protobuf(全称是Protocol Buffers)

定义和描述如下: Protocol Buffers是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用 于(数据)通信协议、数据存储等。(支持 Java、C++、Python 等多种语言,支持多个 平台)

二、安装

检查是否安装成功,执行

1
protoc --version

一、安装流程

https://blog.csdn.net/dalehui/article/details/17593383?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control

1
2
3
4
5
6
7
(1)进入终端 跳转至protobuf文件夹. cd xxxxxxxxxxxxxx(路径)
(2)切换用户身份. sudo su
(3)执行 ./configure
(4)执行 make
(5)执行 make check(可能message.cc会报错,解决办法请看下面)
(6)执行 make install
(7)检查是否安装成功,执行 protoc --version
1
protoc --proto_path=./ --objc_out=./ XXX.proto

image-20201202200227595

三、如何编译protobuf

End

node

[toc]

前言、查看之前是否安装过node

查看之前是否安装过node

1
node -v

常识:

终端执行node -v查看是否安装并配置了其环境变量。如果执行无果,也有可能是安装了,但未配置环境变量。又因为node的安装目录一般是放在 usr/src下。所以,查看命令为

1
2
cd usr/src
ls

如果看到本地有node文件即代表有安装了,只是不一定有配置环境变量

node_install_check

如果没有安装, 则按以下步骤进行安装。

一、node的安装

1、可视化安装node的方法

访问node官网,下载稳定版

image-20201022150722483

安装即可。

2、终端命令安装node的方法(云服务器安装常用的方式)

下面我们以在 CentOS 下源码安装 Node.js 为例

2.1、进入 https://nodejs.org/en/download/ 获取最新的Nodejs版本的下载地址(不建议使用最新的node版本,建议使用V12的)

node_comman_install_1

Nodejs版本的下载注意:不建议使用最新的node版本,建议使用V12的

否则如你使用V14的时候,执行yapi server会出现如下警告提示

image-20210804152703816

出现这样的问题是node版本过高的原因,将版本14降到12便可以解决。首先将原node卸载,然后去官网下载12的版本

拷贝链接,得到 https://nodejs.org/dist/v14.15.1/node-v14.15.1.tar.gz

在终端下载该版本

1
2
cd /usr/local/src/
wget https://nodejs.org/dist/v14.15.1/node-v14.15.1.tar.gz

node_comman_install_2

2.2、解压源码

1
2
3
ls 														# 查看该目录下的文件

tar zxvf node-v14.15.1.tar.gz # 解压制定的压缩包

2.3、编译安装

1
2
3
4
cd node-v14.15.1
./configure --prefix=/usr/local/node/14.15.1
make
make install

node_comman_install3

虽然看似成功了,但其实有警告。

1
2
WARNING: failed to autodetect C++ compiler version (CXX=g++)
WARNING: warnings were emitted in the configure phase

需要解决该警告,如果不解决就继续执行make命令,则会发生失败,失败截图如下:

node_comman_install_3_2

所以,我们先需要安装gcc,安装gcc成功后,重新执行./configure --prefix=/usr/local/node/14.15.1确保命令成功,且无警告。才能保证后续的make等命令才能跟着成功。

安装gcc的命令如下

1
yum -y install gcc gcc-c++ kernel-devel //安装gcc、c++编译器以及内核文件

node_comman_install_3_gcc

重新执行./configure --prefix=/usr/local/node/14.15.1命令,警告解除了

node_comman_install_3_success

然后,我们继续剩余的还没执行的命令

1
2
make
make install

执行make成功的截图如下:(我表示在阿里云CentOS系统上,从早上10点多,执行到下午三点多才执行结束。好坑啊。。。。)

node_comman_install_4

make install的执行就很快了,几秒钟中结束。OK!

2.4、 配置NODE_HOME,进入profile编辑环境变量

1
vim /etc/profile

该文件内容初始如下截图:

node_comman_install_6

输入字母i,进行插入模式,来设置 nodejs 环境变量,即在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容:

1
2
3
#set for nodejs
export NODE_HOME=/usr/local/node/14.15.1
export PATH=$NODE_HOME/bin:$PATH

node_comman_install_6_2

插入完成后,按ESC,然后输入:wq进行保存并退出。然后执行以下命令来编译/etc/profile 从而使刚才的环境变量配置生效

1
source /etc/profile

node_comman_install_7

验证是否安装配置成功

1
node -v

输出 v14.15.1 表示配置成功

npm模块安装路径

1
/usr/local/node/14.15.1/lib/node_modules/

至此,命令安装nodejs结束。

注:Nodejs 官网提供了编译好的 Linux 二进制包,你也可以下载下来直接应用。

二、node指定版本的安装、切换、删除

有时候你之前安装的node版本可能太高,导致在执行某些命令的时候识别不到,那时候,你可能需要切换下node版本。切换node版本的方法如下:

1、先利用工具n安装指定的node版本,再进行切换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看当前使用的node的版本
node -v

# 查看npm的版本
npm -v

# 安装指定的node版本
npm install -g n # 利用npm安装工具n,之后再用n来安装指定的node版本

# 安装指定版本(最好用),版本v自定义
sudo n v12.19.0 # 利用工具n来安装node指定的12.19.0的版本

# 删除已经安装的版本
sudo n rm 14.19.0

image-20201118141002543

2、进行node的版本的切换(不一定能够立即生效)

1
2
# 输入命令n进入node的版本切换界面
n

image-20201118141135112

通过上下选择,选定指定的node版本,或者按q退出。

我们选定12.19.0的版本回车后,退出执行node -v查看当前的node版本,发现还是之前的版本。所以我们应该还要再执行一步生效操作。

image-20201118141320375

3、添加环境变量,使得上述进行的node版本切换能够生效

1
2
3
4
5
6
7
8
export NODE_HOME=/usr/local
export PATH=$NODE_HOME/bin:$PATH
export NODE_PATH=$NODE_HOME/lib/node_modules:$PATH

source ~/.bash_profile # MacOS的环境变量文件
source /etc/profile # 云服务器的环境变量文件

node -v

image-20201118141513712

为避免每次都得终端执行export命令,建议 vim ~/.bash_profile

三、其他

sudo cnpm install -g n

image-20190517182929169

sudo n stable

image-20190517183108288

二、npm执行警告⚠️处理

1、npm 解决缺失 core-js 的问题

1
core-js@1.2.7: core-js@<2.6.5 is no longer maintained. Please, upgrade to core-js@3 or at least to actual version of core-js@2.

image-20190520002140149

解决办法:使用 npm 或者 cnpm 执行以下命令
npm install core-js@3

2、npm 解决缺失 react-dom 的问题

1
antd@3.18.1 requires a peer of react-dom@>=16.0.0 but none is installed. You must install peer dependencies yourself.

image-20190520003332237

3、npm 解决缺失 react 的问题

1
npm WARN react-native@0.59.8 requires a peer of react@16.8.3 but none is installed. You must install peer dependencies yourself.

数学

sin, cos都是三角函数,分别叫做“正弦”、“余弦”、“正切”。

在初中阶段,这三个三角函数是这样解释的:

在一个直角三角形中,设∠C=90°,∠A, B, C 所对的边分别记作 a,b,c,那么对于锐角∠A,它的对边 a 和斜边 c 的比值 a/c 叫做∠A的正弦,记作 sinA;它的邻直角边 b 和斜边 c 的比值 b/c 叫做∠A的余弦,记作 cosA;它的对边 a 和邻直角边 b 的比值 a/b 叫做∠A的正切,记作 tanA。

在高中阶段,这三个三角函数是这样解释的:

在一个平面直角坐标系中,以原点为圆心,1 为半径画一个圆,这个圆交 x 轴于 A 点。以 O 为旋转中心,将 A 点逆时针旋转一定的角度α至 B 点,设此时 B 点的坐标是(x,y),那么此时 y 的值就叫做α的正弦,记作 sinα;此时 x 的值就叫做α的余弦,记作 cosα;y 与 x 的比值 y/x 就叫做α的正切,记作 tanα。

img

asin,acos,atan应该是Matlab里的函数(程序),数学中分别被记为(也是规范的记法) arcsin, arccos,arctan, 分别是sin,cos,tan 的限制在 [-pi/2,pi/2], [0, pi], (-pi/2, pi/2) 的反函数(函数的逆)。(三角函数本身是没有反函数的)

数学

三维空间中向量的旋转

问题

在三维空间中,计算一个向量 v v v(或点 v v v)绕另一个向量 u u u旋转 θ \theta θ角后的坐标。

方法

罗德里格旋转公式(Rodrigues’ Rotation Formula):
v ′ = v c o s θ + u × v s i n θ + ( u ⋅ v ) u ( 1 − c o s θ ) v’ = v cos \theta + u \times v sin \theta + (u \cdot v) u ( 1 - cos \theta)
v

=vcosθ+u×vsinθ+(u⋅v)u(1−cosθ)

公式推导可见 旋转之二 - 三维空间中的旋转:罗德里格旋转公式

第1节:ReactNative开发环境搭建与运行

[TOC]

Android_devices

一、Android中找不到devices的问题处理

查询设备,请使用adb devices

错误提示:error No Android devices connected.

no_Android_device

此时需要:

①、adb kill-server

②、adb start-server

adb devices

原因:模拟器在运行一段时间后,adb服务有可能会出现异常。这时需要重新对adb服务关闭和重启。

附:reload 命令adb shell input keyevent 82

安卓设备值来源:

设备_adb devices

第1节:React开发环境搭建与运行

[TOC]

React

一、检测您是否具备了ReactNative的开发环境

1、环境已完善时

2、环境未完善时

2.1、React Native 环境搭建

  • 1、按照创建新的 React 应用进行环境搭建。

  • 安装方法:npm install create-react-app -g

  • 创建一个应用:create-react-app my-app

二、创建第一个ReactNative项目

1、创建项目

方法一:执行react-native init cj_rn_logindemo

此步骤会生成React Native依赖包node_modules文件夹。每个项目中都要有这部分内容。且该部分的内容可以直接被复制使用。所以,创建项目还有另一个方法。

生成的cj_rn_logindemo工程详见cj_rn_logindemo

方法二:原有iOS项目集成RN

参考来源:React Native 集成到原生项目(iOS)

react-native 指定版本创建项目

因为react-native更新太快,每次react-native init初始化项目的时候,都会安装最新的rn版本,导致之前的一些api不兼容等问题。
所以我们需要安装指定版本的rn来初始化项目:

1
react-native init demo --version 0.59.8
1
2
3
4
5
6
7
react-native 安装指定的版本

react-native init name --version 0.xx.xx

react-native 降低版本

react-native --save [react-native@0.xx.xx](mailto:react-native@0.xx.xx)

三、运行ReactNative项目

1、运行方法

1.1、常见运行方法

命令行运行项目

进入项目根目录cd TestRNProject

运行iOS项目react-native run-ios

1.2、像iOS原生那样在Xcode中运行

双击ios/TestRNProject.xcodeproj文件然后在Xcode中点击Run按钮。(最常用,对iOS开发者)

1.3、在WebStorm中直接运行

详见本文中的附一、进阶:为WebStorm搭建React Native开发环境

1.4、Android中找不到devices的问题处理

错误提示:error No Android devices connected.

rn_Android_device

此时需要:

①、adb kill-server

②、adb start-server

原因:模拟器在运行一段时间后,adb服务有可能会出现异常。这时需要重新对adb服务关闭和重启。

附:reload 命令adb shell input keyevent 82

2、运行项目的常见问题

2.1、RN项目报错“RCTBundleURLProvider.h” file not found

从网上下载别人的ReactNative项目,打开iOS项目的时候,xcode会报错,提示:“RCTBundleURLProvider.h” file not found

原因:node_modules文件夹不存在 或者 node_modules文件夹下的包和当前版本不匹配

解决方法:
1、打开Mac里面的终端,进入项目所在的文件夹目录;
2、把项目里面的 node_modules 文件夹删除掉,然后执行 npm install 命令
3、npm install安装完成后, 执行react-native upgrade命令
4、最后重新打开Xcode,clean一下,应该就没有问题了。

附一、进阶:为WebStorm搭建React Native开发环境

PS:最近又回来搞RN了,以下虽然都是一些老知识了,但你也许有用

问题背景:我不想在WebStorm/VSCode、终端、XCode中来回切换。我想在WebStorm直接运行ReactNative项目
问题背景:我不想在WebStorm/VSCode、终端、XCode中来回切换。我想在WebStorm直接运行ReactNative项目
问题背景:我不想在WebStorm/VSCode、终端、XCode中来回切换。我想在WebStorm直接运行ReactNative项目

1、为Run添加Add New Configuration

image-20190519205612140

点击,Edit configurations…会进入如下界面

image-20190519221955691

点击 + ,选择npm

image-20190519222125672

2、完善所添加的Configuration内容

外层内容填写如下:

image-20190519222852727

External tool内容如下:

image-20190519223454054

上述步骤2中的各值分别为:

  • Program:

    which react-native中获得的 /usr/local/bin/react-native

    image-20190519223703388

  • Arguments:

    run-ios --simulator="iPhone Xʀ"

    run-ios --device="iPhone7_Qian"

    run-android --deviceId="emulator-5554"

附:启动和关闭ADB服务(adb start-serveradb kill-server

iOS设备值来源:

设备_iOS

安卓设备值来源:

设备_adb devices

执行的命令有:

注:前提要cd到工程中后,执行react-native run-android --help才有效。

设备_react-native run-android  --help

  • Working directory:

    建议通过如下图添加宏的方式添加Working directory值。

    image-20190519224816841

添加完成后的图为:

image-20190519225336448

至此,配置结束。接下来我们试下效果。

恭喜,配置结束,休息一下吧

3、试下配置效果是否有效

Run菜单中选择刚才添加的执行项,其就会在执行我们所设置的选项,即执行/usr/local/bin/react-native run-ios "--simulator=iPhone Xʀ"

执行结果如下:

image-20190519225942964

同样的其也会在终端中有如下显示:

image-20190519231236234

当然,如果你使用快捷键”Cmd+R”也能达到这个效果。

image-20190519231502977

经验证,配置无误,使用有效。

经验证,配置无误,使用有效,打工告成

四、Xcode11问题

2019.10.27: Could not find iPhone 11 simulator. Run CLI with –verbose flag for more details.

1、初步分析:

Xcode 11无法在模拟器上运行React-Native应用程序。看结论为没有你想运行的那个模拟器iPhone X。
2、判断分析正确否:

单独运行模拟器,在顶部菜单中,在“硬件,设备,iOS 13.0”下查看。

rn_Could not find simulator

①当您执行run-ios时,react-native旨在匹配请求的设备。内部硬编码默认值为iPhoneX。

②尝试匹配请求的设备的函数在:

/node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/findMatchingSimulator.js

设计此功能是为了使您可以为其提供设备和可选的版本号。

③如果找不到给定的设备和版本,则默认情况下它将使用列表中的第一个设备返回匹配项。

3、解决:

如上所述,首先自己运行模拟器,并记下所需的iPhone或iPad。

然后将此名称作为可选参数传递给run-ios命令行命令,如下所示:

第1节:ReactNative开发环境搭建与运行

[TOC]

ReactNative

一、检测您是否具备了ReactNative的开发环境

1、环境已完善时

2、环境未完善时

2.1、React Native 环境搭建

二、创建第一个ReactNative项目

1、创建项目

方法一:执行react-native init cj_rn_logindemo

此步骤会生成React Native依赖包node_modules文件夹。每个项目中都要有这部分内容。且该部分的内容可以直接被复制使用。所以,创建项目还有另一个方法。

生成的cj_rn_logindemo工程详见cj_rn_logindemo

方法二:原有iOS项目集成RN

参考来源:React Native 集成到原生项目(iOS)

react-native 指定版本创建项目

因为react-native更新太快,每次react-native init初始化项目的时候,都会安装最新的rn版本,导致之前的一些api不兼容等问题。
所以我们需要安装指定版本的rn来初始化项目:

1
react-native init demo --version 0.59.8
1
2
3
4
5
6
7
react-native 安装指定的版本

react-native init name --version 0.xx.xx

react-native 降低版本

react-native --save [react-native@0.xx.xx](mailto:react-native@0.xx.xx)

三、运行ReactNative项目

1、运行方法

1.1、常见运行方法

命令行运行项目

进入项目根目录cd TestRNProject

运行iOS项目react-native run-ios

1.2、像iOS原生那样在Xcode中运行

双击ios/TestRNProject.xcodeproj文件然后在Xcode中点击Run按钮。(最常用,对iOS开发者)

1.3、在WebStorm中直接运行

详见本文中的附一、进阶:为WebStorm搭建React Native开发环境

1.4、Android中找不到devices的问题处理

错误提示:error No Android devices connected.

rn_Android_device

此时需要:

①、adb kill-server

②、adb start-server

原因:模拟器在运行一段时间后,adb服务有可能会出现异常。这时需要重新对adb服务关闭和重启。

附:reload 命令adb shell input keyevent 82

2、运行项目的常见问题

2.1、RN项目报错“RCTBundleURLProvider.h” file not found

从网上下载别人的ReactNative项目,打开iOS项目的时候,xcode会报错,提示:“RCTBundleURLProvider.h” file not found

原因:node_modules文件夹不存在 或者 node_modules文件夹下的包和当前版本不匹配

解决方法:
1、打开Mac里面的终端,进入项目所在的文件夹目录;
2、把项目里面的 node_modules 文件夹删除掉,然后执行 npm install 命令
3、npm install安装完成后, 执行react-native upgrade命令
4、最后重新打开Xcode,clean一下,应该就没有问题了。

附一、进阶:为WebStorm搭建React Native开发环境

PS:最近又回来搞RN了,以下虽然都是一些老知识了,但你也许有用

问题背景:我不想在WebStorm/VSCode、终端、XCode中来回切换。我想在WebStorm直接运行ReactNative项目
问题背景:我不想在WebStorm/VSCode、终端、XCode中来回切换。我想在WebStorm直接运行ReactNative项目
问题背景:我不想在WebStorm/VSCode、终端、XCode中来回切换。我想在WebStorm直接运行ReactNative项目

1、为Run添加Add New Configuration

image-20190519205612140

点击,Edit configurations…会进入如下界面

image-20190519221955691

点击 + ,选择npm

image-20190519222125672

2、完善所添加的Configuration内容

外层内容填写如下:

image-20190519222852727

External tool内容如下:

image-20190519223454054

上述步骤2中的各值分别为:

  • Program:

    which react-native中获得的 /usr/local/bin/react-native

    image-20190519223703388

  • Arguments:

    run-ios --simulator="iPhone Xʀ"

    run-ios --device="iPhone7_Qian"

    run-android --deviceId="emulator-5554"

附:启动和关闭ADB服务(adb start-serveradb kill-server

iOS设备值来源:

设备_iOS

安卓设备值来源:

设备_adb devices

执行的命令有:

注:前提要cd到工程中后,执行react-native run-android --help才有效。

设备_react-native run-android  --help

  • Working directory:

    建议通过如下图添加宏的方式添加Working directory值。

    image-20190519224816841

添加完成后的图为:

image-20190519225336448

至此,配置结束。接下来我们试下效果。

恭喜,配置结束,休息一下吧

3、试下配置效果是否有效

Run菜单中选择刚才添加的执行项,其就会在执行我们所设置的选项,即执行/usr/local/bin/react-native run-ios "--simulator=iPhone Xʀ"

执行结果如下:

image-20190519225942964

同样的其也会在终端中有如下显示:

image-20190519231236234

当然,如果你使用快捷键”Cmd+R”也能达到这个效果。

image-20190519231502977

经验证,配置无误,使用有效。

经验证,配置无误,使用有效,打工告成

四、Xcode11问题

2019.10.27: Could not find iPhone 11 simulator. Run CLI with –verbose flag for more details.

1、初步分析:

Xcode 11无法在模拟器上运行React-Native应用程序。看结论为没有你想运行的那个模拟器iPhone X。
2、判断分析正确否:

单独运行模拟器,在顶部菜单中,在“硬件,设备,iOS 13.0”下查看。

rn_Could not find simulator

①当您执行run-ios时,react-native旨在匹配请求的设备。内部硬编码默认值为iPhoneX。

②尝试匹配请求的设备的函数在:

/node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/findMatchingSimulator.js

设计此功能是为了使您可以为其提供设备和可选的版本号。

③如果找不到给定的设备和版本,则默认情况下它将使用列表中的第一个设备返回匹配项。

3、解决:

如上所述,首先自己运行模拟器,并记下所需的iPhone或iPad。

然后将此名称作为可选参数传递给run-ios命令行命令,如下所示: