如何在卸载我的应用程序之前显示活动(Android)

时间:2012-04-18 23:01:39

标签: android android-activity uninstall

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

我尝试使用Activity监听“android.intent.action.DELETE”意图,如下所示: How to know my app is uninstalled from the device...?

但是当我即将卸载我的应用程序时,选择器弹出要求选择我的应用程序或程序包卸载程序。我怎么能避免这个?

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

5 个答案:

答案 0 :(得分:29)

  

我注意到NQ Mobile Security能够在我点击卸载之后和调用PackageUninstaller之前显示一条消息

他们必须利用Android中的一些安全漏洞。我将研究它,看看我是否可以修复它。应用程序不应在卸载时获得控制权。

感谢您指出这一点!

  

是否有不同的方法拦截您的应用程序UNINSTALL事件?

我当然希望不会。

答案 1 :(得分:6)

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

他们是如何做到的?

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

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

更新:我创建了一个示例应用程序,展示了它的工作原理。 BTW它不适用于最近的(KitKat +我认为)Android版本:https://github.com/pelotasplus/ActionAfterUninstall

答案 2 :(得分:3)

他们可能会要求用户在不知不觉中授予他们非常关键的许可。看看" Permissions"此应用的标签页(截至2012年6月15日):https://play.google.com/store/apps/details?id=com.nqmobile.antivirus20&hl=en

此应用获得的权限列表是彻头彻尾的令人不寒而栗。除其他外:

  

SYSTEM TOOLS RETRIEVE RUNNING APPS允许该应用程序检索   有关当前和最近运行的任务的信息。恶意应用   可能会发现有关其他应用的私人信息

     

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

     

预防平板电脑从睡眠中防止电话从睡眠状态允许该应用程序执行此操作   防止平板电脑进入睡眠状态。允许该应用阻止   电话从睡觉。

     

更改您的UI设置允许该应用   更改当前配置,例如区域设置或整体字体   尺寸。   MODIFY GLOBAL SYSTEM SETTINGS允许该应用修改   系统的设置数据。恶意应用可能会损坏您的系统   组态。

     

DISPLAY SYSTEM-LEVEL ALERTS允许该应用显示   系统警报窗口。恶意应用可能会占据整个屏幕。

     

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

     

更改网络连接允许   用于更改网络连接状态的应用程序。

     

更改WI-FI状态允许该应用与Wi-Fi接入建立连接或断开连接   点,并对配置的Wi-Fi网络进行更改。

- 更新 -

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

    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来源here中PackageManagerService中的第6900行。

为此,必须由用户将应用程序显式注册为设备管理员。请参阅此处有关设备管理的说明:http://developer.android.com/training/enterprise/device-management-policy.html

答案 3 :(得分:3)

我很确定当Activity Manager调用PackageUninstaller时,他们正在监视LogCat以进行拦截。我认为他们会杀死任务并开始自己的活动。 它非常聪明,但肯定会利用Android中的安全漏洞。

答案 4 :(得分:0)

根据https://stackoverflow.com/a/26829978/1317564,这里有一些示例代码:https://github.com/zzljob/android-uninstall-feedback/blob/master/library/jni/feedback-uninstall.c。这实际上不会阻止卸载,但确实提供了捕获它并采取一些措施的方法。我真的很惊讶这在Android中有效,团队可能已经填补了最近发布的空白。