diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorTransportConnection.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorTransportConnection.java
index 1763784104b5c8b3f72679e00d23c63ec65d6b1b..e6a1c5f262dedbc7ad9f0290552b5bf3d594f11e 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorTransportConnection.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorTransportConnection.java
@@ -3,6 +3,7 @@ package org.briarproject.bramble.plugin.tor;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.plugin.Plugin;
 import org.briarproject.bramble.api.plugin.duplex.AbstractDuplexTransportConnection;
+import org.briarproject.bramble.util.IoUtils;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -21,12 +22,12 @@ class TorTransportConnection extends AbstractDuplexTransportConnection {
 
 	@Override
 	protected InputStream getInputStream() throws IOException {
-		return socket.getInputStream();
+		return IoUtils.getInputStream(socket);
 	}
 
 	@Override
 	protected OutputStream getOutputStream() throws IOException {
-		return socket.getOutputStream();
+		return IoUtils.getOutputStream(socket);
 	}
 
 	@Override
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
index eb682e16798d00ca02e21b4a2ec6fac106025311..13b05d84ca7774d3a1173c34fba7d72bb2215ab1 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/util/IoUtils.java
@@ -8,6 +8,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.Socket;
 
 import javax.annotation.Nullable;
 
@@ -59,4 +60,24 @@ public class IoUtils {
 			offset += read;
 		}
 	}
+
+	// Workaround for a bug in Android 7, see
+	// https://android-review.googlesource.com/#/c/271775/
+	public static InputStream getInputStream(Socket s) throws IOException {
+		try {
+			return s.getInputStream();
+		} catch (NullPointerException e) {
+			throw new IOException(e);
+		}
+	}
+
+	// Workaround for a bug in Android 7, see
+	// https://android-review.googlesource.com/#/c/271775/
+	public static OutputStream getOutputStream(Socket s) throws IOException {
+		try {
+			return s.getOutputStream();
+		} catch (NullPointerException e) {
+			throw new IOException(e);
+		}
+	}
 }
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpTransportConnection.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpTransportConnection.java
index 97afa37434acf4db2c3f00592d76ef163851325c..34c7d7a74670a463fb1201c9bf26d1a61f0fcd39 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpTransportConnection.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpTransportConnection.java
@@ -3,6 +3,7 @@ package org.briarproject.bramble.plugin.tcp;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.plugin.Plugin;
 import org.briarproject.bramble.api.plugin.duplex.AbstractDuplexTransportConnection;
+import org.briarproject.bramble.util.IoUtils;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -24,12 +25,12 @@ class TcpTransportConnection extends AbstractDuplexTransportConnection {
 
 	@Override
 	protected InputStream getInputStream() throws IOException {
-		return socket.getInputStream();
+		return IoUtils.getInputStream(socket);
 	}
 
 	@Override
 	protected OutputStream getOutputStream() throws IOException {
-		return socket.getOutputStream();
+		return IoUtils.getOutputStream(socket);
 	}
 
 	@Override
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java
index 5490c7ee099b192e413950d7d30092e21a0efa9d..127bbcc8f3f0186c3533a4737de309071fc70ac2 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java
@@ -1,6 +1,7 @@
 package org.briarproject.bramble.reporting;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.util.IoUtils;
 
 import java.io.Closeable;
 import java.io.File;
@@ -130,7 +131,7 @@ public class DevReportServer {
 			OutputStream out = null;
 			try {
 				socket.setSoTimeout(SOCKET_TIMEOUT_MS);
-				in = socket.getInputStream();
+				in = IoUtils.getInputStream(socket);
 				reportDir.mkdirs();
 				reportFile = File.createTempFile(FILE_PREFIX, FILE_SUFFIX,
 						reportDir);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java
index 919b6f240c54c8e1da69b2cc7dfaf6c1d9d730ad..c4e2bad64c76adcd5eacedfd7e42324c2f144f51 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java
@@ -93,7 +93,7 @@ class DevReporterImpl implements DevReporter {
 			InputStream in = null;
 			try {
 				Socket s = connectToDevelopers();
-				out = s.getOutputStream();
+				out = IoUtils.getOutputStream(s);
 				in = new FileInputStream(f);
 				IoUtils.copyAndClose(in, out);
 				f.delete();
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java
index 7f5cb0090db1fa56102c24a9ce7c5328fe27e896..a254026eff3c1b7e0a762de62d500a56c19b6d2c 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java
@@ -57,8 +57,8 @@ class SocksSocket extends Socket {
 
 		// Connect to the proxy
 		super.connect(proxy, connectToProxyTimeout);
-		OutputStream out = getOutputStream();
-		InputStream in = getInputStream();
+		OutputStream out = IoUtils.getOutputStream(this);
+		InputStream in = IoUtils.getInputStream(this);
 
 		// Request SOCKS 5 with no authentication
 		sendMethodRequest(out);