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
This commit is contained in:
Yizhe Chen
2022-04-23 12:17:28 -07:00
committed by Facebook GitHub Bot
parent 0327282313
commit bf988659cf
2 changed files with 16 additions and 1 deletions

View File

@@ -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();

View File

@@ -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;
}