From bf988659cf1dac78b215ea68c978dc3ce289cac6 Mon Sep 17 00:00:00 2001 From: Yizhe Chen Date: Sat, 23 Apr 2022 12:17:28 -0700 Subject: [PATCH] allow getFlipperPortsPropValue to do disk read as it's a debug tool Summary: `AndroidFlipperClient.java` is a debug tool, and it has some strict mode violation. We should exempt them to reduce noise on logcat. - 1. ``` D StrictMode policy violation; ~duration=43 ms: android.os.strictmode.DiskReadViolation D at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1596) D at libcore.io.BlockGuardOs.access(BlockGuardOs.java:71) D at libcore.io.ForwardingOs.access(ForwardingOs.java:72) D at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7578) D at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:281) D at java.io.File.exists(File.java:815) D at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:681) D at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:672) D at android.app.ContextImpl.getFilesDir(ContextImpl.java:717) D at android.content.ContextWrapper.getFilesDir(ContextWrapper.java:253) D at com.facebook.flipper.android.AndroidFlipperClient.getInstance(AndroidFlipperClient.java:55) ``` - 2. ``` D StrictMode policy violation; ~duration=46 ms: android.os.strictmode.DiskReadViolation D at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1596) D at libcore.io.BlockGuardOs.read(BlockGuardOs.java:304) D at libcore.io.ForwardingOs.read(ForwardingOs.java:176) D at libcore.io.IoBridge.read(IoBridge.java:509) D at java.io.FileInputStream.read(FileInputStream.java:320) D at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) D at java.io.BufferedInputStream.read(BufferedInputStream.java:347) D at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:291) D at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:355) D at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:181) D at java.io.InputStreamReader.read(InputStreamReader.java:184) D at java.io.BufferedReader.fill(BufferedReader.java:172) D at java.io.BufferedReader.readLine(BufferedReader.java:335) D at java.io.BufferedReader.readLine(BufferedReader.java:400) D at com.facebook.flipper.android.FlipperProps.getFlipperPortsPropValue(FlipperProps.java:92) D at com.facebook.flipper.android.FlipperProps.getFlipperDefaultAltPortsPropValue(FlipperProps.java:76) D at com.facebook.flipper.android.FlipperProps.getAltInsecurePort(FlipperProps.java:37) D at com.facebook.flipper.android.AndroidFlipperClient.getInstance(AndroidFlipperClient.java:47) ``` Reviewed By: nikoant Differential Revision: D35784406 fbshipit-source-id: b55ce458e04a44d98565972132707a392d71281c --- .../flipper/android/AndroidFlipperClient.java | 12 +++++++++++- .../com/facebook/flipper/android/FlipperProps.java | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/facebook/flipper/android/AndroidFlipperClient.java b/android/src/main/java/com/facebook/flipper/android/AndroidFlipperClient.java index fe40a1f79..aa65c748a 100644 --- a/android/src/main/java/com/facebook/flipper/android/AndroidFlipperClient.java +++ b/android/src/main/java/com/facebook/flipper/android/AndroidFlipperClient.java @@ -12,6 +12,7 @@ import android.content.pm.PackageManager; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; +import android.os.StrictMode; import android.util.Log; import androidx.core.content.ContextCompat; import com.facebook.flipper.BuildConfig; @@ -39,6 +40,15 @@ public final class AndroidFlipperClient { final Context app = context.getApplicationContext() == null ? context : context.getApplicationContext(); + + // exempt this disk read as this is a debug tool + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); + String privateAppDirectory; + try { + privateAppDirectory = context.getFilesDir().getAbsolutePath(); + } finally { + StrictMode.setThreadPolicy(oldPolicy); + } FlipperClientImpl.init( sFlipperThread.getEventBase(), sConnectionThread.getEventBase(), @@ -52,7 +62,7 @@ public final class AndroidFlipperClient { getId(), getRunningAppName(app), getPackageName(app), - context.getFilesDir().getAbsolutePath()); + privateAppDirectory); sIsInitialized = true; } return FlipperClientImpl.getInstance(); diff --git a/android/src/main/java/com/facebook/flipper/android/FlipperProps.java b/android/src/main/java/com/facebook/flipper/android/FlipperProps.java index 0d8647ae3..aeafce7f7 100644 --- a/android/src/main/java/com/facebook/flipper/android/FlipperProps.java +++ b/android/src/main/java/com/facebook/flipper/android/FlipperProps.java @@ -7,6 +7,7 @@ package com.facebook.flipper.android; +import android.os.StrictMode; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; @@ -81,6 +82,9 @@ class FlipperProps { String propValue = null; Process process = null; BufferedReader reader = null; + + // this function does not read from disk and this tool is for debug only + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); try { process = Runtime.getRuntime().exec(new String[] {"/system/bin/getprop", propsName}); reader = @@ -107,6 +111,7 @@ class FlipperProps { if (process != null) { process.destroy(); } + StrictMode.setThreadPolicy(oldPolicy); } return propValue; }