• This repository has been archived on 23/Sep/2021
  • Stars
    star
    497
  • Rank 88,652 (Top 2 %)
  • Language
    C++
  • License
    Apache License 2.0
  • Created over 8 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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以上部分机型无法开启)

参考

About

License

Copyright (C) 2016 [email protected]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

BezierMaker

🔥 通过de Casteljau算法绘制贝塞尔曲线,并计算它的切线,实现1-7阶贝塞尔曲线的形成动画。
Java
1,408
star
2

GoodView

🔥 Android点赞+1效果,支持文本和图像
Java
1,286
star
3

WheelView

Android滚轮控件,基于ListView实现,可以自定义样式。
Java
1,021
star
4

decompile-apk

🔥 Decompile APK(反编译APK)
Shell
736
star
5

AndroidNote

🔥 Android 进阶笔记,包含常用的技术框架、博客社区、书籍等。
679
star
6

AndroidCommon

🔥 一个简单的开源Android工具类库,提供许多常用的类帮助我们开发程序
Java
124
star
7

wechat-lightapp

微信小程序(应用号)开发工具+Demo+教程
JavaScript
118
star
8

CheckPasswordStrength

🔥 一个检测密码强度的Java工具库。
Java
60
star
9

RoundImageView

圆角图片控件,支持圆形边框和椭圆边框
Java
48
star
10

MultiWindow

Android N 多窗口支持
Java
47
star
11

gradle-bintray-upload

Upload Android Project's gradle script files used in Android Studio
31
star
12

TouchRegion

增大触摸点击区域
Java
12
star
13

apksig

the source code of apksig(Mirror Repo), keeping up-to-date with the official update.
Java
10
star
14

MVX

an Android MVC & MVP & MVVM demo
Java
3
star
15

json2model

This library generates a model object corresponding to a JSON string by executing commands in code
Dart
2
star
16

fork_repository_for_private

The public repositories provided by Github do not allow the creation of private branches, and the method of creating a private branch by copying the repository is documented here.
Shell
1
star