如何显示一个活动之前,我的应用程序被卸载(安卓)

我虽然这是不可能的,但我注意到,NQ移动安全能够显示一条消息后,我点击卸载和PackageUninstaller被调用之前。 我想在我的应用程序中复制这种行为。

我试着用一个Activity听“android.intent.action.DELETE”意图,如这里build议: 如何知道我的应用程序是从设备上卸载…?

但是,当我即将卸载我的应用程序,select器popup要求select我的应用程序或程序包卸载程序。 我怎样才能避免这一点?

有没有不同的方法来拦截你的应用程序的UNINSTALL事件? (在回答这是不可能的,请尝试卸载NQ移动安全,看看会发生什么。在我的Android 2.3.4它显示一个很好的屏幕说,这是不安全的,没有安全应用程序去)。

我注意到,NQ移动安全能够显示消息后,我点击卸载和PackageUninstaller被调用之前

他们必须利用Android中的一些安全漏洞。 我会研究它,看看我能不能修好。 应用程序不应该在卸载时得到控制。

感谢您指出这一点!

有没有不同的方法来拦截你的应用程序的UNINSTALL事件?

我当然不希望。

Opera Max是一个类似的应用程序 – 卸载后打开一个网页。

他们如何做到这一点?

通过使用libevent,从本地代码,他们看/data/data/com.opera.max目录被删除,然后发布好旧的action.VIEW广播时发生。

安装他们的应用程序,运行它,并在根目录的设备上从adbshell删除/data/data/com.opera.max目录

更新:我创build了一个示例应用程序,显示它如何工作。 顺便说一句,它不适用于最近(KitKat +我认为)Android版本: https : //github.com/pelotasplus/ActionAfterUninstall

他们可能会要求用户在不知情的情况下授予他们非常重要的权限。 查看此应用的“权限”标签(截至2012年6月15日): https : //play.google.com/store/apps/details? id = com.nqmobile.antivirus20 &hl = zh_CN 。

这个应用程序的权限列表是彻头彻尾的寒意。 除其他事项外:

系统工具检索运行应用程序允许该应用程序检索有关当前和最近运行的任务的信息。 恶意应用可能会发现有关其他应用的隐私信息。

更改/截取networking设置和stream量允许该应用更改networking设置,并拦截和检查所有networkingstream量,例如更改任何APN的代理和端口。 恶意应用程序可能会在您不知情的情况下监控,redirect或修改networking数据包。

预防睡眠预防电话免受睡眠允许应用程序,以防止片剂进入睡眠。 允许该应用阻止手机进入睡眠状态。

更改您的用户界面设置允许该应用更改当前configuration,例如语言环境或整体字体大小。 修改全局系统设置允许该应用修改系统的设置数据。 恶意应用程序可能会破坏您的系统configuration。

显示系统级警报允许该应用显示系统警报窗口。 恶意应用程序可能会占用整个屏幕。

装载和卸载文件系统允许该应用装载和卸载可移动存储的文件系统。

更改networking连接允许该应用更改networking连接的状态。

更改WI-FI状态允许该应用连接到Wi-Fi接入点并从其断开连接,并更改configuration的Wi-Finetworking。

– 更新 –

我还发现Android Package Manager几乎只是删除了一个包,如果这样做的话。 在此之前执行的唯一检查是要删除的软件包当前是否被注册为具有活动设备pipe理员:

  try { if (dpm != null && dpm.packageHasActiveAdmins(packageName)) { Slog.w(TAG, "Not removing package " + packageName + ": has active device admin"); return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER; } } catch (RemoteException e) { } 

请参阅AOSP源文件中的PackageManagerService中的第6900行。

为此,应用程序必须显式注册为用户的设备pipe理员。 请参阅设备pipe理注意事项: http : //developer.android.com/training/enterprise/device-management-policy.html 。

我非常肯定他们正在监视LogCat,以便在活动pipe理器调用PackageUninstaller时拦截。 我认为他们杀了任务,并开始自己的活动。 这非常聪明,但绝对是在利用Android的安全漏洞。

按照https://stackoverflow.com/a/26829978/1317564 ,这是一些示例代码: https : //github.com/zzljob/android-uninstall-feedback/blob/master/library/jni/feedback -uninstall.c 。 这实际上并不会停止卸载,但提供了一种方法来抓住它并采取一些行动。 我真的很惊讶,这在Android的作品,该团队可能已经填补了在最近的版本中的差距。