Android App 监听自身卸载,反馈统计

本文介绍了一种有效的Android应用自身卸载监听方案。针对Java层无法直接监听自身卸载的问题,通过C语言实现了一个后台进程,利用inotify机制监测/data/data/{package-name}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AppUninstall

项目地址: venshine/AppUninstall
简介:Android App 监听自身卸载,反馈统计

方案

  1. 监听系统卸载广播:只能监听到其他应用的卸载广播,无法监听到自己是否被卸载。
  2. 读取系统 log:第三方软件卸载无法得知。
  3. 静默安装另一个程序,监听自己是否被卸载:需要 root 权限。
  4. Java 线程轮询,监听/data/data/{package-name}目录是否存在:卸载 app,进程退出,线程也被销毁。
  5. C 进程轮询,监听/data/data/{package-name}目录是否存在:目前业界普遍采用的方案。

原理

从前四种方案可以看到,单纯的 Java 层代码是无法监听自身卸载的。既然 Java 层无法实现,我们试着使用 C 语言在底层实现。借助 Linux 进程 fork 出来的 C 进程在应用被卸载后不会被销毁,监听/data/data/{package-name}目录是否存在,如果不存在,就证明应用被卸载了。

本程序采用第 5 种解决方案,对其进行优化,通过 linux 中的inotify机制来监听应用的卸载。

实现

  1. fork()子进程
  2. 创建监听文件
  3. 初始化 inotify 实例
  4. 注册监听事件
  5. 调用 read 函数开始监听
  6. 卸载反馈统计

场景

  1. 正常卸载
  2. 断网卸载
  3. 清除数据(5.0 以上不支持)
  4. kill 进程(5.0 以上不支持)
  5. 插拔 USB 线
  6. 覆盖安装
  7. 内部存储移到 SD 卡
  8. 开机监听(官方不推荐)
  9. 打开浏览器(5.0 以上部分机型无法开启)

参考


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值