Android Termux用Go编译安装BaiduPCS-Go
快速通道
- 安装GoLang
pkg install golang
或者apt install golang
- 去Github下载BaiduPCS-Go的源码
我选择qjfoidnh的增强版BaiduPCS-Go - 到下载目录,解压
zip包:unzip BaiduPCS-Go-3.8.3.zip
tar.gz包:tar -zxvf BaiduPCS-Go-3.8.3.tar.gz
- 进项目根目录,build
然后项目根目录就会编译出来一个名为BaiduPCS-Go的可执行文件了,你可以将它复制到bin文件夹里面,完工cd BaiduPCS-Go-3.8.3 GOOS=android GOARCH=arm go build
背景
有一天我想在我的老古董小米平板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中进入项目根目录,接下来就可以编译了。
编译之前,我们要为编译做一些准备
- 设置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- 换源,GO 进行Build的时候好像要下载一些依赖,但是默认用的是官方的代理,我用官方的代理完全没有办法下载,所以我把它换成了阿里源
$ go env -w GO111MODULE=on $ go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
- 换源,GO 进行Build的时候好像要下载一些依赖,但是默认用的是官方的代理,我用官方的代理完全没有办法下载,所以我把它换成了阿里源
做完这两部,我们就可以开始编译了
官方写的是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文件夹就可以直接使用了
问题总结
- linux-arm版本release无法登陆?
编译android-arm版本 pkg install golang
connection timeout?
使用流量- 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
- cannot find runtime/cgo?
将CGO_ENABLE变量删掉