An useful tools that controls android components
Blocker is a component controller for Android applications. Currently, it supports using PackageManager and Intent Firewall to control the state of components, and it can be extended in the future. You could switch between these controllers seamlessly. For the application rules, you could export & import it. It is compatible with the backup files generated by MyAndroidTools, and you could convert it to Intent Firewall rules without any effort.
Android system provides us a tool called PackageManager, for managing the applications installed on the phone or getting information about the applications. It has a method called
setComponentEnabledSetting(ComponentName, int, int), the application can call this API to control the component state for itself. Call to this API to control other applications will fail unless you have signature permission.
Fortunately Android has another tool called pm, users could control the component state in the command line mode. But it needs Root permission to run with.
pm disable [PackageName/ComponmentName]
No matter using PackageManager in the code or using pm in the command line mode, the configurations will be written to
Starting from Android 4.4.2(API 19), the Intent Firewall was introduced. It still has effects in the latest Android system (Pie, API 28). It was intergrated into Android Framework, for filtering the intents sent by applications or systems.
Each intent sent by the application will be filtered by the Intent firewall. The rules are stored in .xml files. If there are changes in the configuration file has changed, the Intent Firewall will update the rules immediately.
Based on security considerations, only system applications can read & write the directory directly where the configuration file is placed, third-party applications do not have any permissions to get the configuration file. Furthermore, when the firewall filters the rules, the sender identity of the intent will not be considered, so we cannot filter intents by sender identity.
Intent Firewall, indeed it is a firewall, it has no impact on component status. The application detects the component is on, but it just cannot start the component.
For the components disabled by PackageManager, if the application starts it, an exception will be thrown. Developers can catch this exception to know whether the component is disabled or not, so they could re-enable this component. That's the reason why the components will be enabled unexpectedly. If you are using an Intent Firewall controller, there will be no problems.
Shizuku is an application by Rikka, RikkaApps/Shizuku
Starting from Android O, if we install a Test-Only application，users could use the
pmcommand to control the command status. We could modify the install package to set it into Test-Only mode，using APIs provided by Shizuku to control the component status.
Tutorial for modifying APKs (Chinese Only) [实验性功能] [开发者向]如何免Root控制应用程序组件