其实StackOverFlow上面已经有解决方案了,可以去看

本文只是进行一个总结

问题场景:

一个Go语言程序,按照 GOOS=linux GOARCH=arm64 进行编译,程序里面用到了Go的http包进行网络传输。目标是在安卓Termux终端上成功运行

系统信息:Redmi Note 8 Pro,Android 11 Pixel Experience 手机已ROOT

原因分析:

就像StackOverflow上面说的那样

Since the Linux in Android is not so “standard”. /etc/resolv.conf is not available. The app then just keep looking up host in localhost:53.

安卓上面的Linux不是很标准,不使用Linux通用的/etc/resolv.conf进行DNS解析,这导致一般的Linux程序因找不到这个文件而无法进行DNS解析,进而无法进行网络通信。

解决方案:

很简单,只需要在手机根目录的 /etc/ 文件夹下新建一个名为 resolv.conf 的文件,内容如下,一行即可

nameserver 8.8.8.8

注意:访问手机根目录需要ROOT权限,本人的手机已经ROOT了所以就直接新建即可。如果没有ROOT,建议参考下面这个Github上面的讨论尝试一下,但由于未经本人尝试,成功与否不做保证。