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)。

评论

可能最大的区别是,您可以禁用每个应用程序组件(活动,服务,广播接收器,内容提供程序),而无需禁用应用程序本身,但只能隐藏整个应用程序。 pm的用法对于隐藏来说有些混乱,但是基础代码仅处理整个程序包,而不处理组件。换句话说,hide是临时卸载-k。

那是有趣的信息。既然您已经提到了此信息,我将测试并报告hide是否可以禁用组件。它的用法似乎是禁用的副本:android.googlesource.com/platform/frameworks/base / + / ...

这就是为什么会令人误解; runSetEnabledSetting()检查组件名称,但是runSetHiddenSetting()仅检查包名称。不确定是否将来可以隐藏组件。

@AndrewT。,谢谢您的信息。我的测试已经根据您的信息显示了结果。请参阅修改后的问题(包括已编辑的表格)以获取更多信息。如果可能的话,请考虑发布正式答案。

参考:引入新的“阻塞”状态,并将setApplicationBlocked重命名为setApplicationHidden

#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 / 目录,而pm hide不会删除。

–艾尔凡·拉蒂夫(Irfan Latif)
20-2-27在23:09

但是至少您的答案/信息仍然无法回答问题的第一行。

–艾尔凡·拉蒂夫(Irfan Latif)
20-2-28在7:54

正确。那么您认为应该删除它吗?

– Jeff Luyet
20-2-28在14:09