Golang编译安卓可执行文件
一部旧手机在家发挥余热,安装Termux后,希望手机能自动更新DNS解析,方便远程访问家里网络。
最开始使用Python完成,为了方便能直接运行,用Go做了重新实现。
实现逻辑是,通过https://4.ipw.cn
获取当前IP,然后通过阿里云SDK去检查IP是否一致,不一致则更新。
编译脚本
1 | SET CGO_ENABLED=0 |
编译成功后在Termux上执行异常。
1 | Get "https://4.ipw.cn": dial tcp: lookup 4.ipw.cn on [::1]:53: read udp [::1]:48523->[::1]:53: read: connection refused |
DNS解析的问题,问题原因可以看
- https://github.com/termux/termux-app/issues/869#issuecomment-433985523
- https://github.com/golang/go/issues/8877
解决办法,使用proot解决
1 | pkg install proot |
执行命令
1 | proot -b $PREFIX/etc/resolv.conf:/etc/resolv.conf ./homeddns |
希望golang log打印输出到文件,直接使用 >> ddns.log是不生效的,使用 2>> ddns.log生效
- https://stackoverflow.com/questions/19965795/how-to-write-log-to-file
因为代码有阿里云授权key,所以不能写死在代码里。
解决办法是
在main方法里面定义变量
打包时添加参数
1 | -ldflags "-X 'main.keyId=xxx' -X 'main.keySecret=xxx' -X 'main.recordId=xxx'" |