Android Termux用Go编译安装BaiduPCS-Go

Android Termux用Go编译安装BaiduPCS-Go

快速通道

  1. 安装GoLang
    pkg install golang或者apt install golang
  2. 去Github下载BaiduPCS-Go的源码
    我选择qjfoidnh的增强版BaiduPCS-Go
  3. 到下载目录,解压
    zip包:unzip BaiduPCS-Go-3.8.3.zip
    tar.gz包:tar -zxvf BaiduPCS-Go-3.8.3.tar.gz
  4. 进项目根目录,build
    cd BaiduPCS-Go-3.8.3
    GOOS=android GOARCH=arm go build
    
    然后项目根目录就会编译出来一个名为BaiduPCS-Go的可执行文件了,你可以将它复制到bin文件夹里面,完工

背景

有一天我想在我的老古董小米平板1上下载百度云的文件,可是又不想装百度云盘毒瘤APP,于是想到自己曾经在ArchLinux上用过的BaiduPCs-Go,于是就去Github上下了一个release版本,可是登陆的时候却报错,报错内容如下

BaiduPCS-Go:/ 1337735344LHY$ login
请输入百度用户名(手机号/邮箱/用户名), 回车键提交 > 1337735344lhy
请输入密码(输入的密码无回显, 确认输入完成, 回车提交即可) >
错误代码: -1, 消息: 网络请求失败, Post "https://wappass.baidu.com/wp/api/login": lookup wappass.baidu.com on [::1]:53: read udp [::1]:60024->[::1]:53: read: connection refused
BaiduPCS-Go:/ 1337735344LHY$ EOF

我还以为是原作者项目废了,于是换了个二十多天前还有改动的增强版项目,后来发现也是同一个问题,看了一下issue发现,原来这是termux特有的问题,release上没有适合termux的版本(虽然有arm的版本),得自己编译一个合适termux的版本。

开搞

1. 安装GoLang

termux自带有包管理器apt和pkg我感觉两个东西都是一样的,包管理器可以使用termux-chang-repo来换源,但是GoLang并不在这些源里面,所以我选择用手机开流量,然后给平板开热点,直接pkg install golang就可以了

2. 下载源码

qjfoidnh的增强版BaiduPCS-Go
去github上下载源码包,解压,并在termux中进入项目根目录,接下来就可以编译了。
编译之前,我们要为编译做一些准备

  1. 设置GO环境变量GOOS和GOARCH
    README#编译交叉编译-说明中有提到交叉编译的说明,当然之间编译应该也可以用。
    GOOS是操作系统,GOARCH是架构,可以使用go version来查看go语言版本和当前系统以及架构,我是32位的所以是arm而不是arm64
    $ go version
    go version go1.17.1 android/arm
    
    运行 go tool dist list 查看所有支持的 GOOS/GOARCH
    所以我的GOOS=android GOARCH=arm64
    1. 换源,GO 进行Build的时候好像要下载一些依赖,但是默认用的是官方的代理,我用官方的代理完全没有办法下载,所以我把它换成了阿里源
      $ go  env -w GO111MODULE=on
      $ go  env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
      

做完这两部,我们就可以开始编译了
官方写的是GOOS=android GOARCH=arm CGO_ENABLED=0 go build,但是我这样Build会报错没有cgo

$ GOOS=android GOARCH=arm CGO_ENABLED=0 go build
# github.com/qjfoidnh/BaiduPCS-Go
loadinternal: cannot find runtime/cgo

可能是我在这里是直接编译,没用交叉编译的原因?
但是最后我把CGO_ENABLE删了就好了,或许也可以尝试GOOS 和 GOARCH也删掉,毕竟我我们不是交叉编译(我没试)
GOOS=android GOARCH=arm go build
运行完之后没有报错,并且在项目根目录会生成一个二进制文件BaiduPCS-Go,这时候将它移动到bin文件夹就可以直接使用了

问题总结

  1. linux-arm版本release无法登陆?
    编译android-arm版本
  2. pkg install golangconnection timeout?
    使用流量
  3. go build timeout?
    $ GOOS=android GOARCH=arm CGO_ENABLED=0 go build
    go: github.com/GeertJohan/go.incremental@v1.0.0: Get "https://proxy.golang.org/github.com/%21geert%21johan/go.incremental/@v/v1.0.0.mod": dial tcp 172.217.160.81:443: i/o timeout
    go: downloading github.com/peterh/liner v1.2.1
    go: downloading github.com/olekukonko/tablewriter v0.0.4
    go: downloading github.com/urfave/cli v1.22.5
    go: downloading github.com/json-iterator/go v1.1.10
    go: downloading github.com/qjfoidnh/baidu-tools v0.0.0-20201218182636-dfa5778abeed
    go: downloading github.com/tidwall/gjson v1.6.4
    go: downloading github.com/qjfoidnh/Baidu-Login v1.4.0
    go: downloading github.com/fatih/color v1.10.0
    go: downloading github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
    go: downloading github.com/mattn/go-runewidth v0.0.9
    go: downloading github.com/golang/protobuf v1.4.3
    go: downloading github.com/GeertJohan/go.incremental v1.0.0
    go: downloading github.com/oleiade/lane v1.0.1
    go: github.com/GeertJohan/go.incremental@v1.0.0: Get "https://proxy.golang.org/github.com/%21geert%21johan/go.incremental/@v/v1.0.0.mod": dial tcp 172.217.160.81:443: i/o timeout
    
    换源
    $ go  env -w GO111MODULE=on
    $ go  env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
    
  4. cannot find runtime/cgo?
    将CGO_ENABLE变量删掉
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值