diff --git a/conn/controlfns_linux.go b/conn/controlfns_linux.go
index aff6245..a2396fe 100644
--- a/conn/controlfns_linux.go
+++ b/conn/controlfns_linux.go
@@ -7,6 +7,7 @@ package conn
 
 import (
 	"fmt"
+	"runtime"
 	"syscall"
 
 	"golang.org/x/sys/unix"
@@ -36,14 +37,18 @@ func init() {
 			var err error
 			switch network {
 			case "udp4":
-				c.Control(func(fd uintptr) {
-					err = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_PKTINFO, 1)
-				})
+				if runtime.GOOS != "android" {
+					c.Control(func(fd uintptr) {
+						err = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_PKTINFO, 1)
+					})
+				}
 			case "udp6":
 				c.Control(func(fd uintptr) {
-					err = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_RECVPKTINFO, 1)
-					if err != nil {
-						return
+					if runtime.GOOS != "android" {
+						err = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_RECVPKTINFO, 1)
+						if err != nil {
+							return
+						}
 					}
 					err = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_V6ONLY, 1)
 				})
diff --git a/conn/sticky_default.go b/conn/sticky_default.go
index 8c0adf5..05f00ea 100644
--- a/conn/sticky_default.go
+++ b/conn/sticky_default.go
@@ -1,4 +1,4 @@
-//go:build !linux
+//go:build !linux || android
 
 /* SPDX-License-Identifier: MIT
  *
@@ -23,3 +23,5 @@ func setSrcControl(control *[]byte, ep *StdNetEndpoint) {
 // srcControlSize returns the recommended buffer size for pooling sticky control
 // data.
 const srcControlSize = 0
+
+const StdNetSupportsStickySockets = false
diff --git a/conn/sticky_linux.go b/conn/sticky_linux.go
index 278eb19..274fa38 100644
--- a/conn/sticky_linux.go
+++ b/conn/sticky_linux.go
@@ -1,3 +1,5 @@
+//go:build linux && !android
+
 /* SPDX-License-Identifier: MIT
  *
  * Copyright (C) 2017-2023 WireGuard LLC. All Rights Reserved.
@@ -111,3 +113,5 @@ func setSrcControl(control *[]byte, ep *StdNetEndpoint) {
 }
 
 var srcControlSize = unix.CmsgSpace(unix.SizeofInet6Pktinfo)
+
+const StdNetSupportsStickySockets = true
diff --git a/conn/sticky_linux_test.go b/conn/sticky_linux_test.go
index 3213e77..0219ac3 100644
--- a/conn/sticky_linux_test.go
+++ b/conn/sticky_linux_test.go
@@ -1,4 +1,4 @@
-//go:build linux
+//go:build linux && !android
 
 /* SPDX-License-Identifier: MIT
  *
diff --git a/device/sticky_linux.go b/device/sticky_linux.go
index 3ce0769..f9230f8 100644
--- a/device/sticky_linux.go
+++ b/device/sticky_linux.go
@@ -25,6 +25,9 @@ import (
 )
 
 func (device *Device) startRouteListener(bind conn.Bind) (*rwcancel.RWCancel, error) {
+	if !conn.StdNetSupportsStickySockets {
+		return nil, nil
+	}
 	if _, ok := bind.(*conn.StdNetBind); !ok {
 		return nil, nil
 	}