pm disable
已经完成工作时,对pm hide
有什么需求?我根据搜索和研究已经整理了一些信息:点击此处查看表格(已编辑)。
您可以看到,
pm hide
可以实现pm disable
可以实现的功能,但无需root用户访问权限。另外,根据我的测试,我得出的结论是,执行pm hide
时,与pm disable
不同,无论如何,该应用程序都不会再次加载到内存中。我认为隐藏是块的后代。 Block最初在KitKat 4.4.0中引入,一直保留到Android L Preview,后来在Android 5.0.0中被hide取代。对我来说还不清楚是什么导致重命名隐藏块,为什么需要重命名?
无论如何,如果没有root访问权限的人可以实现disable的功能,那么为什么disable根本不存在?
此外,为什么存在皮?如果可以说hide是为了帮助用户摆脱他们想要的任何东西而创建的,而无需卸载并且无需生根该设备,那么在GUI中,我们应该有一个相关的选项,但是我们只有disable选项。 />交织的问题:
它们的优缺点是什么,除了我的问题中提到的那些?
为什么两者都存在
从技术上讲,hide超越了disable功能并可以真正禁用任何应用程序(在应用程序上执行时),这在技术上是真的吗?
新功能:鉴于Andrew T.的发现以及表中显示的测试结果,皮革使用情况中显示的组件是错误还是我无法理解皮革的使用情况?
出于历史目的:皮革的使用情况如下现在显示为
pm hide [--user USER_ID] PACKAGE_OR_COMPONENT
注意:该问题不会以任何形式寻求未经证实的意见,而是寻求直接的答案。如果您必须发表意见,请务必使用可靠的技术来源和合理的理由进行备份,以区分技术性和真实性以及投机性。
在Carbon ROM(Android 5.1.1)和适用于OnePlus One的COS12(Android 5.0.2)。
#1 楼
我还没有足够的意见要发表..这还不是答案...更像是...信息:pm hide做到了吗
pm disable了吗
我可以看到有人可能会认为pm hide会卸载。
例如。如果在pm hide之后运行此命令
diff <(adb shell pm list packages -u) <(adb shell pm list packages)
,您将看到隐藏的软件包。 -u是以前卸载的软件包的列表。
下面的这些pm命令都会调用android的Intent类。
pm hide <package>
pm unhide <package>
pm enable <package>
pm disable <package>
下面的命令:
pm hide <package>
调用:
android.intent.action.PACKAGE_REMOVED.
以下命令:
pm unhide <package>
调用:
/>
android.intent.action.PACKAGE_ADDED.
pm禁用和pm都启用:
android.intent.action.PACKAGE_CHANGED.
感谢@Irfan Latif进行更正。我可以证实他在说什么。在“ Android设置”下:如果查看已安装的应用程序,即使在pm hide之后,您仍然可以看到该应用程序已安装。有趣的是,禁用pm后,该应用将从安装的应用中消失。这些命令似乎不会创建任何明显的文件系统更改。
这些目录:
/mnt/sdcard/Android/data/
/data/data
和其他杂项目录...
一个可能的假设...也许最好的方法是始终调用这两个命令来禁用任何软件包:
pm disable <package>;pm hide <package>
评论
pm hide在Android 9上可用,并且隐藏应用程序不会将其卸载。取消隐藏后,所有(或至少某些部分)数据均保持不变。
–艾尔凡·拉蒂夫(Irfan Latif)
20-2-27在22:50
我删除了Android 6参考,在您发表评论前几秒钟就将其删除了,但是谢谢您。根据这个花花公子,它与uninstall -k相同。 github.com/blackbbc/Evil-Hide/blob/master/README_en.md和stackoverflow.com/a/21173985/3066563
– Jeff Luyet
20-2-27在23:01
pm uninstall -k会完全删除/ data / app /
–艾尔凡·拉蒂夫(Irfan Latif)
20-2-27在23:09
但是至少您的答案/信息仍然无法回答问题的第一行。
–艾尔凡·拉蒂夫(Irfan Latif)
20-2-28在7:54
正确。那么您认为应该删除它吗?
– Jeff Luyet
20-2-28在14:09
评论
可能最大的区别是,您可以禁用每个应用程序组件(活动,服务,广播接收器,内容提供程序),而无需禁用应用程序本身,但只能隐藏整个应用程序。 pm的用法对于隐藏来说有些混乱,但是基础代码仅处理整个程序包,而不处理组件。换句话说,hide是临时卸载-k。那是有趣的信息。既然您已经提到了此信息,我将测试并报告hide是否可以禁用组件。它的用法似乎是禁用的副本:android.googlesource.com/platform/frameworks/base / + / ...
这就是为什么会令人误解; runSetEnabledSetting()检查组件名称,但是runSetHiddenSetting()仅检查包名称。不确定是否将来可以隐藏组件。
@AndrewT。,谢谢您的信息。我的测试已经根据您的信息显示了结果。请参阅修改后的问题(包括已编辑的表格)以获取更多信息。如果可能的话,请考虑发布正式答案。
参考:引入新的“阻塞”状态,并将setApplicationBlocked重命名为setApplicationHidden