有任何adb命令可以启用/禁用系统应用程序吗?

感谢

#1 楼

是。命令是pm disable <package name>。您必须是root用户才能执行此操作:

打开shell并获取root用户:

PC> adb shell
shell@hammerhead:/ $ su


列出所有已启用的应用程序,并按“计算器”过滤“:

root@hammerhead:/ # pm list packages -e | grep 'calculator'
package:com.android.calculator2


禁用的应用程序:

root@hammerhead:/ # pm disable com.android.calculator2
Package com.android.calculator2 new state: disabled


列出所有禁用的应用程序:

root@hammerhead:/ # pm list packages -d
package:com.android.calculator2
package:com.google.android.apps.inputmethod.hindi
package:jp.co.omronsoft.iwnnime.ml
package:com.google.android.inputmethod.pinyin
package:com.google.android.inputmethod.korean
package:com.google.earth
root@hammerhead:/ #


还有其他值得注意的地方:


在我的测试中,以这种方式禁用的应用程序从“设置”>“应用程序”列表中完全消失。它们甚至似乎都没有显示在“已禁用”选项卡中。您可以使用pm enable <package name>重新启用应用程序。实际上,根据我的经验,这似乎是重新启用它们的唯一方法。


评论


禁用时可以避免隐藏所选应用程序吗?

– Android开发人员
14年4月18日在13:03

@androiddeveloper号。完全隐藏应用程序,包括从UI中隐藏,是其背后的全部想法。

– Izzy♦
2014年10月31日12:43

@Izzy,我明白了。是否有可能做相反的事情,即只是隐藏而不禁用?

– Android开发人员
14-10-31在12:49

从理论上讲,我猜是的。但我不知道该怎么做。商店中有一些“应用程序”在安装后不会出现在任何地方(因为它们例如仅在其他一些应用程序中提供其他设置,或者提供某些“不可见的服务”,例如“客户经理”用于特定服务),这证明它应该可以工作不知何故;但恐怕要在该应用的Manifest之类的工具中完成(我不是Android开发人员,所以我不能说)。

– Izzy♦
2014年10月31日,12:54

可以通过其Playstore页面启用该应用。

–信息屏幕
16-11-23在13:41

#2 楼

无论该应用程序是系统应用程序还是第三方应用程序(用户安装),它都应该起作用。


请参阅“确定应用程序的软件包名称以获取软件包名称”中的答案。有关的应用程序并使用adb shell执行这些命令(需要root访问权限):

adb shell
su
pm disable PACKAGE              # disables the app and hides it in Settings -> Applications 
pm hide PACKAGE                 # alternative; for Android Lollipop and above
cmd package suspend PACKAGE     # alternative; package remains visible in Launcher and Settings app but cannot be used; a feature of Device Administration


PACKAGE指代该应用程序的包名称

要恢复该应用,请在上述命令中将disable替换为enable,将其隐藏以取消隐藏,然后将其以unsuspend暂停并使用root特权执行。

如果您拥有Android KitKat或更高版本,并且根访问权限,请在PC中使用adb执行以下命令:

adb shell pm block PACKAGE         # for Android KitKat
adb shell pm hide  PACKAGE         # for Android Lollipop only
adb shell pm disable-user PACKAGE  # alternative to `pm hide`; for Android Lollipop and above; this works just like disabling an app through Settings app


要恢复该应用程序:

adb shell pm unblock PACKAGE   # for Android KitKat
adb shell pm unhide PACKAGE    # for Android Lollipop and only if you used `pm hide` earlier
adb shell pm enable PACKAGE    # for Android Lollipop and above


>更改将立即进行。

#3 楼

除了@eldarerathis的答案,您可以为特定用户禁用应用程序。我使用这种方法从受限制的用户中删除了一些未在用户设置屏幕上列出的应用。来自adb shell的所有命令。进行更改需要root用户访问权限。
首先,获取用户的ID:
$ pm list users
Users:
  UserInfo{0:Alice:13} running
  UserInfo{11:Bob:18} running

然后
$ pm disable --user 11 com.cyanogenmod.filemanager
Package com.cyanogenmod.filemanager new state: disabled-user

重新启用
# pm enable --user 11 com.cyanogenmod.filemanager

/>在此示例中,爱丽丝可以使用文件管理器,但鲍勃不能使用。
您可以使用hide而不是disable做类似的事情。我不确定哪个是最好的,但是请看这个答案。 hide的反义词是unhide(可能需要重新启动才能实现unhide)。
您可以使用pm list packages --user 11列出软件包。给-e列出启用的软件包,或者给-d列出禁用的软件包。 FWIW:我在Amazon Fire(KFFOWI)上使用CM 12.1在Lollipop上尝试了上述操作。