最近尝试手动build wireguard- android,踩了不少坑,大概总结一下
wireguard- android采用c++、go、java和kotlin进行开发,所以需要makefile和gomod的支持,这就要求我们系统中有这些环境(但是仓库的readme完全没说,屑中屑),因此首先如果要成功build wireguard,就需要先装好环境
NDK是Android中帮助我们与c/c++动态链接库进行交互的工具包,默认Android是不会单独为项目导入的,所以需要手动去引入NDK,NDK内置了makefile编译所需要的东西,不然的话无法正常编译makefile
wireguard在build时会有一个校验文件的过程,也就是distributionSha256Sum,它会调用sha256sum这条指令进行校验 这是一个Linux下用来校验文件是否合法的指令,但是macOS环境下是没有这个指令的,所以需要手动安装它的工具包
shellbrew install coreuntils
wireguard还需要对go进行编译,因此也需要go的环境支持(可是它readme还是没有写)
在mac下可以直接使用brew安装go环境
shellbrew install go
但是由于国内网络环境问题,在build中可能会出现dial tcp xxx.xxx.xxx.xxx timeout或者connect refused的报错,比如我遇到:
dial tcp 142.251.42.241:443: connect: connection refused
这种报错是由于go env缺乏国内代理导致的,更换proxy代理即可,在terminal中运行下面的指令即可
shellgo env -w GOPROXY=https://goproxy.cn
这个东西其他系统是不需要的,但是macos需要单独安装这个环境,官方readme有提示macOS users may need flock(1). 同样的,直接用brew装就行了
shellbrew install flock
注意:brew国内镜像资源站是没有flock(1)的资源的,如果你配了中科大、阿里的brew源,就可能报错fatil,所以最好在安装前更换回brew的默认源
好容易配了这么多环境,应该可以开始build了,然后Android Studio报错了:
这个是直接读报错信息即可,因为AndroidStudio要求避免使用distributionSha256Sum,这样可能会导致AndroidStudio的crash(真屑啊),最好的也是最直接的解决办法就是。。。在gradle-wrapper.properties文件中把这一行属性注释掉。。。
配好了一堆环境,解决完Androidstuio的问题,这时候再点击build,就可以build success了
本文作者:伞菌
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!