adb Android禁用四大组件与如何冻结APP

时间:2025-01-28 07:51:10
ComponentName name = new ComponentName(, );
			(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

不可用状态:COMPONENT_ENABLED_STATE_DISABLED
可用状态:COMPONENT_ENABLED_STATE_ENABLED
默认状态:COMPONENT_ENABLED_STATE_DEFAULT
flags:行为标签,值可以是DONT_KILL_APP或者0。 0说明杀死包含该组件的app

ComponentName 可以是包名类名

adb 手动设置:
adb shell pm enable 包名/类名

例如:adb shell pm enable /.MainActivity

	   pm clear [--user USER_ID] PACKAGE
       pm enable [--user USER_ID] PACKAGE_OR_COMPONENT
       pm disable [--user USER_ID] PACKAGE_OR_COMPONENT
       pm disable-user [--user USER_ID] PACKAGE_OR_COMPONENT
       pm disable-until-used [--user USER_ID] PACKAGE_OR_COMPONENT
       pm hide [--user USER_ID] PACKAGE_OR_COMPONENT
       pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT

包名类名获取:

       //获取其他app的servcie
       List<ResolveInfo> infos2 = (intent2, 0);
		
		//获取其他app的广播
       List<ResolveInfo> infos3 = (intent2, 0);
       
       //获取其他app的Activity
      List<ResolveInfo> infos2 = (intent2, 0);

		//获取其他app的ContentProvider
       List<ResolveInfo> infos3 = (intent2, 0);

其中intent2 里面可以设置 action\packageName等过滤

而且,禁用信息可以在 /data/system/users/0/ 目录下查看,如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<package-restrictions>
    <pkg name="" stopped="true" nl="true" enabled="3">
        <enabled-components>
            <item name="" />
            <item name="" />
        </enabled-components>
        <disabled-components>
            <item name="" />
            <item name="" />
            <item name="" />
        </disabled-components>
    </pkg>
    <pkg name="" stopped="true" nl="true" />
    <pkg name="">
        <disabled-components>
            <item name="" />
        </disabled-components>
    </pkg>
    <pkg name="" stopped="true" nl="true" />
    <pkg name="." stopped="true" />
    <pkg name="">
        <disabled-components>
            <item name="" />
        </disabled-components>
    </pkg>
    <pkg name="" stopped="true" nl="true" />
    <pkg name="" stopped="true" nl="true" />
    <pkg name="">
        <disabled-components>
            <item name="" />
        </disabled-components>
    </pkg>
    <preferred-activities />
    <persistent-preferred-activities />
    <crossProfile-intent-filters />
</package-restrictions>

里面包含了包名、组件、状态等信息,其中 enabled=3时等于禁用状态,1时等于状态正常。
上述文件描述了app的组件状态信息,app状态信息,是否冻结等。