如何防止应用程序被卸载?

Posted

技术标签:

【中文标题】如何防止应用程序被卸载?【英文标题】:How to prevent an application from being uninstalled? 【发布时间】:2011-11-24 07:06:58 【问题描述】:

我正在开发一个应用程序,供父母照看他们的孩子。所以这个应用程序不能被孩子删除。我需要知道如何使其可卸载或用户需要密码才能删除该应用程序。

【问题讨论】:

除非设备已root,否则您是否认为此类功能不存在的任何充分理由? 只是为了扩展 Jon 的评论,以防你错过了他的观点,如果这个功能存在,那将是一件 非常 坏事。跨度> @jon ,我知道这很糟糕,但这是客户的要求,我不能和他争论,我已经告诉他如果需要那么多限制的话你为什么要把手机给你的孩子。 我猜这个链接给出了所有那些说不可能的答案,多亏了@willytate developer.android.com/guide/topics/admin/device-admin.html 既然我已经找到了解决方案,我会在完成后发布代码,我相信它确实对很多人有帮助 【参考方案1】:

安库,

我认为最接近您的需求的是 2.2 中引入的 Device Administration 功能。

应用程序注册为设备管理员后,除非未注册,否则无法卸载。这将防止应用被卸载。

虽然设备管理 API 不允许对此特定功能进行密码保护,但您可以对应用程序进行密码保护,以防止有人篡改应用中的设备管理功能。

我使用一个名为 SeekDroid 的应用程序,它具有类似的功能。

【讨论】:

@WILLTATE :这个输入是一个很好的开始!只需要更多信息 1> 我的应用程序现在是设备管理员并且无法卸载 2> 当用户禁用设备管理员时我如何询问密码 3> 我可以为此调用我的应用程序活动吗?? @willtate:“您可以使用密码保护应用中的取消注册功能”——不,您不能。 @willtate:设备管理员 API 为您提供了一个钩子来提供解释性消息,告知用户为什么他们不应该取消注册设备管理员。设备管理 API 不提供阻止注销操作的挂钩。 这种方法的问题是,用户仍然可以通过从设备管理员注销应用程序来删除应用程序。在这一点上,我认为没有任何解决方案可以真正阻止应用程序被卸载 至于道德问题,这通常是企业安装合规软件的要求(例如),其中用户不拥有手机或 BYOD。还有其他特定于制造商(例如三星)的方法,如果您是开发合作伙伴,他们允许您作为系统应用程序进行签名【参考方案2】:

我只见过一个应用程序可以做到这一点,它叫做Prey,用于跟踪丢失的手机和电脑。该项目是开源的,因此您可以通过their code 了解他们是如何做到的,或者联系开发人员,也许他们会告诉您他们是如何做到的。

【讨论】:

我查看了他们的代码,他们完全按照 William Tate 的回答解释了! 我也见过 Prey 这样做。如果您允许用户通过密码控制此功能,我认为这根本不是不道德的。这样一来,未经授权访问设备的人就无法卸载敏感应用。 Prey 仍然可以通过系统设置->安全-设备管理器选项注销

以上是关于如何防止应用程序被卸载?的主要内容,如果未能解决你的问题,请参考以下文章

防止应用程序在 Android 中卸载

激活设备管理器权限,防止被卸载

激活设备管理器权限,防止被卸载

WiX:如何防止注册表值在卸载时被删除?

如何防止标准 Windows 10 用户的卸载程序提升?

如何防止 wix 自定义引导程序卸载 UI 在升级过程中显示