From c0babbc643bc18af7ae901dbbb4bd0fb7d0518fd Mon Sep 17 00:00:00 2001 From: KoheiYamashita Date: Sun, 1 Mar 2026 03:48:59 +0900 Subject: [PATCH] fix: override DNS resolver for CGO_ENABLED=0 Android builds The pure-Go DNS resolver falls back to [::1]:53 on Android because /etc/resolv.conf does not exist, causing all hostname-based API calls to fail. Use 8.8.8.8:53 via net.DefaultResolver.Dial as fallback. When CGO is enabled (Termux), the cgo resolver is used and this override is never called. Co-Authored-By: Claude Opus 4.6 --- cmd/clawdroid/main.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cmd/clawdroid/main.go b/cmd/clawdroid/main.go index 65f9e3857..857d3275e 100644 --- a/cmd/clawdroid/main.go +++ b/cmd/clawdroid/main.go @@ -13,6 +13,7 @@ import ( "fmt" "io" "io/fs" + "net" "os" "os/signal" "path/filepath" @@ -114,6 +115,16 @@ func copyDirectory(src, dst string) error { }) } +func init() { + // Override DNS resolver for CGO_ENABLED=0 builds (Android APK). + // The pure-Go resolver falls back to [::1]:53 on Android because + // /etc/resolv.conf does not exist. When CGO is enabled (Termux), + // the cgo resolver is used instead and this Dial is never called. + net.DefaultResolver.Dial = func(ctx context.Context, network, address string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, "udp", "8.8.8.8:53") + } +} + func main() { if len(os.Args) < 2 { printHelp()