{"record":{"id":"1f8e95308575e977","repo":"MuntashirAkon/AppManager","slug":"firewall-overlays-require-android-13","errorCode":null,"errorMessage":"Firewall overlays require Android 13+","messagePattern":"Firewall overlays require Android 13\\+","errorType":"exception","errorClass":"RemoteException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/permission/ConnectivityPermissionOverridePlatform.java","lineNumber":44,"sourceCode":"    public boolean isEnforced(int uid, @NonNull PermissionOverride override) throws Exception {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {\n            return false;\n        }\n        int firewallChain = chain(override);\n        if (!ConnectivityManagerCompat.getFirewallChainEnabled(firewallChain)) {\n            return false;\n        }\n        int rule = ConnectivityManagerCompat.getUidFirewallRule(firewallChain, uid);\n        int expected = override.desiredGranted\n                ? android.net.ConnectivityManagerHidden.FIREWALL_RULE_DEFAULT\n                : android.net.ConnectivityManagerHidden.FIREWALL_RULE_DENY;\n        return rule == expected;\n    }\n\n    @Override\n    public void apply(int uid, @NonNull PermissionOverride override) throws Exception {\n        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {\n            throw new RemoteException(\"Firewall overlays require Android 13+\");\n        }\n        int firewallChain = chain(override);\n        // Per-UID rules only take effect while their chain is enabled.\n        ConnectivityManagerCompat.setFirewallChainEnabled(firewallChain, true);\n        int rule = override.desiredGranted\n                ? android.net.ConnectivityManagerHidden.FIREWALL_RULE_DEFAULT\n                : android.net.ConnectivityManagerHidden.FIREWALL_RULE_DENY;\n        ConnectivityManagerCompat.setUidFirewallRule(firewallChain, uid, rule);\n    }\n\n    private static int chain(@NonNull PermissionOverride override) {\n        return Integer.parseInt(override.controller);\n    }\n}\n","sourceCodeStart":26,"sourceCodeEnd":59,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/permission/ConnectivityPermissionOverridePlatform.java#L26-L59","documentation":"ConnectivityPermissionOverridePlatform.apply() enforces network firewall rules per UID using hidden ConnectivityManager firewall-chain APIs whose per-UID rule support requires Android 13 (TIRAMISU). On older builds it throws RemoteException('Firewall overlays require Android 13+').","triggerScenarios":"Applying a connectivity/network permission override through this platform implementation on a device running Android 12 or lower.","commonSituations":"Applying network access rules on Android 12 or older devices; running batch permission overrides on pre-13 firmware.","solutions":["Run the operation on an Android 13+ device, or gate the feature behind Build.VERSION.SDK_INT >= TIRAMISU in the caller","Use a fallback override mechanism (e.g. standard network permission grant/revoke) on older Android versions","Skip connectivity overrides for affected UIDs on pre-13 devices and inform the user"],"exampleFix":"// before\nplatform.apply(uid, override); // throws on Android 12\n// after\nif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n    platform.apply(uid, override);\n} else {\n    applyLegacyNetworkOverride(uid, override);\n}","handlingStrategy":"fallback","validationCode":"if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {\n    return; // or use legacy override path\n}","typeGuard":null,"tryCatchPattern":"try {\n    platform.apply(uid, override);\n} catch (RemoteException e) {\n    Log.w(TAG, \"Firewall overlays unavailable\", e);\n    applyLegacyOverride(uid, override);\n}","preventionTips":["Gate connectivity-override features on Build.VERSION.SDK_INT >= TIRAMISU","Provide a legacy permission path for older Android versions","Hide or disable the feature in the UI on unsupported devices"],"tags":["java","android","network","version-compat"],"backgroundTag":"unsupported-platform","analyzedSha":"0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5","analyzedAt":"2026-09-12T14:03:37.243Z","contentChangedAt":"2026-09-12T14:03:37.243Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}