V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq915458022
V2EX  ›  程序员

Android 上如何实现监听自身卸载

  •  
  •   qq915458022 · 2016-06-21 19:27:40 +08:00 · 5931 次点击
    这是一个创建于 3083 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用 native code fork 出来的进程在 L 以上貌似也会被杀掉…求问有什么办法监听啊?
    44 条回复    2016-07-01 13:34:42 +08:00
    wy315700
        1
    wy315700  
       2016-06-21 19:56:02 +08:00
    多开几个,总有先后顺序
    devzero
        2
    devzero  
       2016-06-21 23:31:00 +08:00 via Android
    据说有种方法是抓 logcat
    ljbha007
        3
    ljbha007  
       2016-06-21 23:32:08 +08:00
    写个服务轮询调用 ps 看进程号还在不 不在就启动
    kookxiang
        4
    kookxiang  
       2016-06-21 23:46:20 +08:00
    记得 UC 浏览器卸载会弹调查问卷,可以看看
    qq915458022
        5
    qq915458022  
    OP
       2016-06-22 07:07:20 +08:00 via Android
    @devzero 卸载的第一步就是杀掉线程,线程都挂了 log 抓不到啊…
    qq915458022
        6
    qq915458022  
    OP
       2016-06-22 07:08:06 +08:00 via Android
    @ljbha007 卸载一开始服务都会全部挂,而且这样做不会损失性能么?
    qq915458022
        7
    qq915458022  
    OP
       2016-06-22 07:08:31 +08:00 via Android
    @kookxiang 在 Android L 以上也会弹么?
    lee015
        8
    lee015  
       2016-06-22 09:22:53 +08:00 via Android
    上全家桶相互监听
    devzero
        9
    devzero  
       2016-06-22 10:29:08 +08:00 via Android
    @qq915458022 如果我没记错的话应该是点击卸载才杀的吧
    kookxiang
        10
    kookxiang  
       2016-06-22 11:18:36 +08:00   ❤️ 1
    @qq915458022 N 年前就换了 Chrome 了,所以也不知道新版有没有改了
    ljbha007
        11
    ljbha007  
       2016-06-22 11:25:36 +08:00
    貌似是可以弹窗拦截卸载 Intent 但是这样用户体验非常糟糕 建议放弃这个设计
    qq915458022
        12
    qq915458022  
    OP
       2016-06-22 11:32:12 +08:00 via Android
    @devzero 对呀,但是如果用户点了取消就会以为卸载掉了…
    qq915458022
        13
    qq915458022  
    OP
       2016-06-22 11:32:32 +08:00 via Android
    @kookxiang 我先去找找看,谢谢啦
    qq915458022
        14
    qq915458022  
    OP
       2016-06-22 11:32:57 +08:00 via Android
    @ljbha007 倒是不用拦截😂只是想卸载的时候通知服务器一声
    ljbha007
        15
    ljbha007  
       2016-06-22 11:35:21 +08:00
    @qq915458022 拦截了再转发给系统呀
    missingbobo
        16
    missingbobo  
       2016-06-22 11:48:07 +08:00
    这种应用一般我都是卸载的
    vjnjc
        17
    vjnjc  
       2016-06-22 12:13:35 +08:00
    哇,楼主跟我想到一块去了,有结果的话麻烦 at 我 :)
    shyling
        18
    shyling  
       2016-06-22 12:16:57 +08:00
    在微看点里有个 libhelper.so 好像用来做这个,但是具体实现木有深入了解
    devzero
        19
    devzero  
       2016-06-22 12:33:06 +08:00 via Android
    @qq915458022 是这么个思路,不过感觉和 11L 的差不多 http://hcq0618.blog.163.com/blog/static/178090351201352124640719/
    davin
        20
    davin  
       2016-06-22 12:39:40 +08:00
    很多国产软件 / APP 就是这个尸水性,所以坚决不用。
    qq915458022
        21
    qq915458022  
    OP
       2016-06-22 12:53:54 +08:00 via Android
    @shyling 是要看汇编的节奏么😂😂
    qq915458022
        22
    qq915458022  
    OP
       2016-06-22 12:54:25 +08:00 via Android
    @ljbha007 如果用户点了取消呢?
    qq915458022
        23
    qq915458022  
    OP
       2016-06-22 12:54:58 +08:00 via Android
    @missingbobo 就是卸载时向服务器发送一封遗书 啊…有没有什么危害…
    BSD
        24
    BSD  
       2016-06-22 13:13:01 +08:00   ❤️ 2
    这论坛真有意思,经常一起喷流氓软件,却又经常一起研讨怎么才能让 app 更流氓。。。。
    qq915458022
        25
    qq915458022  
    OP
       2016-06-22 13:18:16 +08:00 via Android
    @vjnjc 👌
    erDaren
        26
    erDaren  
       2016-06-22 13:24:58 +08:00
    你,要,干,什,么,
    qq915458022
        27
    qq915458022  
    OP
       2016-06-22 13:26:29 +08:00 via Android
    @BSD 并没有啊,只是向服务器发送一个卸载的统计数据而已
    qq915458022
        28
    qq915458022  
    OP
       2016-06-22 13:27:29 +08:00 via Android
    @erDaren 向服务器发送一个统计数据。国内又没有 google 服务
    torchmu
        29
    torchmu  
       2016-06-22 13:52:25 +08:00
    @devzero 看了一下手上荣耀 6 ,输出的是 act=android.intent.action.PACKAGE_REMOVED ,所以兼容性还是个问题。此外,魅族、华为等默认不输出高级日志,所以这也是个问题。再然后,即便能监听,首先还得保活,这已经是另一个难点了。
    momou
        30
    momou  
       2016-06-22 13:57:45 +08:00
    卸载需要统计吗?
    在一定时间没连接服务器不就可以判定了
    qq915458022
        31
    qq915458022  
    OP
       2016-06-22 14:22:36 +08:00 via Android
    @momou 关机呢
    qq915458022
        32
    qq915458022  
    OP
       2016-06-22 14:23:49 +08:00 via Android
    @torchmu 我的想法是用辅助功能监听卸载的对话框,出现了后立即向服务器发送这么一个意图,如果后续没有取消这个意图就判定为卸载
    guyskk
        33
    guyskk  
       2016-06-22 14:56:42 +08:00
    @qq915458022 要是没联网呢
    liyvhg
        34
    liyvhg  
       2016-06-22 15:02:05 +08:00 via Android
    @qq915458022 如果卸载的时候还收将被卸载的 app 本身控制,可以发送数据到服务器就可以做其他事情,例如阻止卸载,例如卸载的时候释放安装其他 app ,好恐怖。
    qq915458022
        35
    qq915458022  
    OP
       2016-06-22 15:28:09 +08:00 via Android
    @guyskk 所以只能粗略估计
    momou
        36
    momou  
       2016-06-22 17:22:55 +08:00
    @qq915458022 如果一个用户几天都关机还算是有效用户?
    sunpj
        37
    sunpj  
       2016-06-22 17:29:37 +08:00
    l 以上应该做不到了吧 系统机制改了 之前 fork 进程交给系统托管应该是正解
    qq915458022
        38
    qq915458022  
    OP
       2016-06-22 17:34:45 +08:00 via Android
    @sunpj 交给 inil ?
    9hills
        39
    9hills  
       2016-06-23 07:48:19 +08:00
    @qq915458022 你关机一天、两天,总不能关机 7 天吧。关机 7 天和卸载有啥区别。。

    只需要判断 last connection 的时间就好了,超过 7 天的认为卸载掉了
    qq915458022
        40
    qq915458022  
    OP
       2016-06-23 08:03:26 +08:00 via Android
    @9hills 也行,我就这样实现算了
    qq915458022
        41
    qq915458022  
    OP
       2016-06-23 08:04:35 +08:00 via Android
    @vjnjc 来看看吧~我准备这样实现了。
    vjnjc
        42
    vjnjc  
       2016-06-23 15:47:57 +08:00
    @qq915458022 收到,能细问一下辅助功能是什么吗?他是 android 提供的某一个 manager ?
    qq915458022
        43
    qq915458022  
    OP
       2016-06-23 16:03:06 +08:00 via Android
    @vjnjc 这玩意略强啊,几句话说不清楚的…大概意思就是能监控到屏幕最上方 app 的包名和控件类名,去看看开发文档吧
    wzxjohn
        44
    wzxjohn  
       2016-07-01 13:34:42 +08:00
    想通过日志的各位可以歇歇了。。。国内厂商大多直接把日志关了,啥也监控不到啊。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2684 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:15 · PVG 18:15 · LAX 02:15 · JFK 05:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.