0
0
mirror of https://github.com/schwabe/ics-openvpn.git synced 2024-09-20 03:52:27 +02:00

Add logging of StrictMode violations to app internal log

Also disable penaltyDeath by default as thjere is some Android internal
leak that I am unable to track down.
This commit is contained in:
Arne Schwabe 2021-10-04 16:55:14 +02:00
parent 609fd8e292
commit cf093699bd
2 changed files with 39 additions and 9 deletions

View File

@ -14,6 +14,12 @@ import android.graphics.Color;
import android.os.Build;
import android.os.StrictMode;
import android.os.strictmode.Violation;
import androidx.annotation.RequiresApi;
import java.util.concurrent.Executors;
import de.blinkt.openvpn.BuildConfig;
import de.blinkt.openvpn.R;
import de.blinkt.openvpn.api.AppRestrictions;
@ -23,6 +29,9 @@ public class ICSOpenVPNApplication extends Application {
@Override
public void onCreate() {
if (BuildConfig.BUILD_TYPE.equals("debug"))
enableStrictModes();
if("robolectric".equals(Build.FINGERPRINT))
return;
@ -34,8 +43,7 @@ public class ICSOpenVPNApplication extends Application {
mStatus = new StatusListener();
mStatus.init(getApplicationContext());
if (BuildConfig.BUILD_TYPE.equals("debug"))
enableStrictModes();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AppRestrictions.getInstance(this).checkRestrictions(this);
@ -43,15 +51,36 @@ public class ICSOpenVPNApplication extends Application {
}
private void enableStrictModes() {
StrictMode.VmPolicy policy = new StrictMode.VmPolicy.Builder()
StrictMode.ThreadPolicy.Builder tpbuilder = new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath()
.build();
.penaltyLog();
StrictMode.VmPolicy.Builder vpbuilder = new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
tpbuilder.penaltyListener(Executors.newSingleThreadExecutor(), this::logViolation);
vpbuilder.penaltyListener(Executors.newSingleThreadExecutor(), this::logViolation);
}
//tpbuilder.penaltyDeath();
//vpbuilder.penaltyDeath();
StrictMode.VmPolicy policy = vpbuilder.build();
StrictMode.setVmPolicy(policy);
}
@RequiresApi(api = Build.VERSION_CODES.P)
public void logViolation(Violation v) {
String name = Application.getProcessName();
System.err.println("------------------------- Violation detected in " + name + " ------" + v.getCause() + "---------------------------");
VpnStatus.logException(VpnStatus.LogLevel.DEBUG, null, v);
}
@TargetApi(Build.VERSION_CODES.O)
private void createNotificationChannels() {
NotificationManager mNotificationManager =
@ -90,4 +119,5 @@ public class ICSOpenVPNApplication extends Application {
mChannel.setLightColor(Color.CYAN);
mNotificationManager.createNotificationChannel(mChannel);
}
}

View File

@ -47,7 +47,7 @@ public class VpnStatus {
public static TrafficHistory trafficHistory;
public static void logException(LogLevel ll, String context, Exception e) {
public static void logException(LogLevel ll, String context, Throwable e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
LogItem li;
@ -59,11 +59,11 @@ public class VpnStatus {
newLogItem(li);
}
public static void logException(Exception e) {
public static void logException(Throwable e) {
logException(LogLevel.ERROR, null, e);
}
public static void logException(String context, Exception e) {
public static void logException(String context, Throwable e) {
logException(LogLevel.ERROR, context, e);
}