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

安卓下令人震惊的 APP 关联启动方式

  •  1
     
  •   sammo · 2016-10-21 13:03:53 +08:00 · 30802 次点击
    这是一个创建于 2715 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://twitter.com/AC_MUTD/status/789314602286723072
    “ ( 图为 ) VIVO X7 的管理界面。不需要 root ”



    问题:
    1. 我是否孤陋寡闻了 / 大家都知道这个事么?
    2. 上述公司的 developer 是否知道自家 APP 的这些关联启动?
    3. Android 下 ( 即外国 APP 之间 ) 是否也有类似的关联启动 / 这是不是全球 Android APP 开发的常态或潜规则?
    4. 这是正常的吗? ( 尤其是和 这个手机里的所谓的 Chrome 、 Google Play 服务 关联启动的 )

    不懂之处或问题问得不恰当的地方请多指教

    -
    77 条回复    2018-04-05 22:23:02 +08:00
    honeycomb
        1
    honeycomb  
       2016-10-21 13:12:22 +08:00 via Android   ❤️ 3
    1 ,是 /这是几年以前的新闻。
    2 ,是,本就是他们故意这么做的
    3 ,肯定有进程保活,但无通过推送 SDK 关联启动,因为不需要 /不是。

    因为有 gapps 自带的 gcm (最初叫 c2dm ,目前叫 fcm ),所以不需要额外的推送服务。

    何况连 Google 都知道在 Android 上部署了 doze/app standby 来限制应用后台运行。

    进一步地,它还加入了一个 RUN_IN_BACKGROUND 的 op ,这个 op 被限制住的时候,应用便只能调用 foreground service 与 bound service ,除此以外的后台运行都被阻止
    iMono
        2
    iMono  
       2016-10-21 13:15:29 +08:00
    怎么截得长图
    Jaylee
        3
    Jaylee  
       2016-10-21 13:15:41 +08:00
    应该是用了同一家的推送吧。。
    firefffffffffly
        4
    firefffffffffly  
       2016-10-21 13:26:25 +08:00
    我知道的有些 sdk 都附赠全家桶启动功能,比如*度地图,推送 sdk 估计更是重灾区,很多开发者在不知情情况下,就背了连锁启动的黑锅。
    queuey
        5
    queuey  
       2016-10-21 13:34:22 +08:00
    @firefffffffffly 你说的应该是链式唤醒吧,但是他们这个明显八竿子打不着的公司都能互相启动了?
    st2udio
        6
    st2udio  
       2016-10-21 13:35:41 +08:00
    国内没有统一的推送,无奈
    beimenjun
        7
    beimenjun  
       2016-10-21 13:41:40 +08:00   ❤️ 1
    这个互相唤醒应该是用了同一家推送 SDK 导致的,安卓墙内一些推送服务就是依赖互相唤醒对方,来保证常驻后台接收相关推送。
    ovear
        8
    ovear  
       2016-10-21 13:44:15 +08:00
    很可能是推送 SDK 的锅。。
    vivagonna
        9
    vivagonna  
       2016-10-21 13:48:36 +08:00 via Android
    这个就算用后台管理程序限制了也只能是唤醒一次杀一次吧?所以唯一的解决方式是不安装?
    loshine1992
        10
    loshine1992  
       2016-10-21 13:54:40 +08:00
    杀进程之后接不到推送了,用户说:消息、推送都接不到,辣鸡 App 。

    为了保证杀进程之后依然收到推送,国内第三方推送 sdk 基本都弄了一个联合唤醒的机制,只要使用了同一家的 sdk ,启动其中一个 app 的时候就会唤醒其它所有集成了该家 sdk 的 app 的推送进程,以保证所有 app 推送的送达率。

    如果有 gcm 就可以所有 app 都使用 gcm 自然不会有这个事情,但墙内的世界,你懂的。
    shizhouren
        11
    shizhouren  
       2016-10-21 14:00:42 +08:00
    怎么截得长图 @sammo
    hei1000
        12
    hei1000  
       2016-10-21 14:00:52 +08:00   ❤️ 3
    有些 app 比如新浪微博会使用小米推送(xmpush)的接口,所有使用这个推送的 app 回相互唤醒,但是开发者也可以主动禁止的,比如前一段时间酷安 app 就开始使用 xmpush ,发现问题后很快他们的开发者就禁掉了唤醒其他 app 的“ bug ”了,像这样的良心的很少
    beimenjun
        13
    beimenjun  
       2016-10-21 14:18:56 +08:00
    @hei1000 不一定是良心,这货禁止了别人唤醒它自己的进程的行为了吗?

    没有的话,某种程度上只接收别人唤醒不唤醒别人比互相唤醒还糟糕。
    hei1000
        14
    hei1000  
       2016-10-21 14:26:58 +08:00
    @beimenjun 目前没有发现谁会唤醒酷安,另外我用的 flyme ,所以自带一部分切断唤醒
    firefffffffffly
        15
    firefffffffffly  
       2016-10-21 14:36:11 +08:00
    @queuey 都是一样的, 你的 app 如果使用了这些 sdk ,这些 sdk 就会偷偷在你的应用进程里执行唤醒其它应用的操作,结果看起来就像是你的 app 唤醒了其它应用。
    imbahom
        16
    imbahom  
       2016-10-21 14:38:31 +08:00
    应该是三方 SDK 的锅,我感觉其实大部分 android 程序员都不研究这些流氓手段(只是被动使用)
    EricCartman
        17
    EricCartman  
       2016-10-21 14:39:53 +08:00 via Android
    国产全冻结,需要的时候打开,或者换 iOS
    Khlieb
        18
    Khlieb  
       2016-10-21 15:22:10 +08:00 via Android
    还有换替代品 app
    queuey
        19
    queuey  
       2016-10-21 15:30:24 +08:00
    @firefffffffffly 所以我换成了极为辣鸡,极为自闭的 iOS 了🌝
    sylecn
        20
    sylecn  
       2016-10-21 15:42:17 +08:00
    通知,推送,广告类型的通知,进程常驻,耗电量
    这些真是伤不起啊。目前为止,需要通知的,只能让它常驻,比如微信这种。用的华为手机,一旦设置了不让进程常驻,大部分通知都弹不出来。设置了允许常驻,耗电量就刷刷的上升。

    也不知道是 app 优化的不好,还是故意作恶。
    airycanon
        21
    airycanon  
       2016-10-21 15:45:02 +08:00
    Chrome 启动广东移动是什么情况……
    fearme
        22
    fearme  
       2016-10-21 15:45:39 +08:00 via iPhone
    已经转 ios 爽死了
    benpichu
        23
    benpichu  
       2016-10-21 16:11:18 +08:00
    [我记得使用 umeng sdk 的应用确实会互相唤醒(]
    tooZero
        24
    tooZero  
       2016-10-21 16:14:25 +08:00
    @airycanon 你是说一个流量的页面吗 成都联通表示也有
    xuejinwei
        25
    xuejinwei  
       2016-10-21 16:21:25 +08:00
    没什么打进小怪的,国内 android 环境就这样
    SKull4
        26
    SKull4  
       2016-10-21 16:32:40 +08:00
    这是最蛋疼的么?
    最蛋疼的是我用数据线连接了其他人的电脑,结果毫无通知的安装了 4 个 APP
    百度的全家桶,腾讯的应用宝,还有其它什么的,真是感觉到被强奸了一样
    firefox12
        27
    firefox12  
       2016-10-21 16:34:17 +08:00
    研究了又杂的? 你用了别人的 sdk 还想不给别人白干活?
    ixufuyang
        28
    ixufuyang  
       2016-10-21 16:37:49 +08:00 via iPhone
    卧槽,好可怕,这是潜规则么。。。
    Chrisplus
        29
    Chrisplus  
       2016-10-21 16:49:23 +08:00
    推送的锅,国内没有 gapps 情况下没有办法的办法

    就不知道小米推送在小米的设备上会不会表现的好一点。
    cairnechen
        30
    cairnechen  
       2016-10-21 16:52:39 +08:00
    没有 GCM 你找不到更好的方式让通知信息及时触达用户
    20015jjw
        31
    20015jjw  
       2016-10-21 16:57:06 +08:00 via Android
    接着装啊 国产 app 继续用啊 早晚给你烂光
    20015jjw
        32
    20015jjw  
       2016-10-21 16:59:00 +08:00 via Android
    @SKull4 开着 usb debugging 插的吧 不开没事 而且原生安卓接新电脑会提醒问你要权限的
    honeycomb
        33
    honeycomb  
       2016-10-21 17:13:39 +08:00 via Android
    @SKull4
    这个只是因为你开了 adb 而已(当然这绝不是你的责任,错在它们不可以用 adb 推应用)。

    @loshine1992
    墙内也要用 gcm 的,连不上显然不是开发者或用户的责任
    loshine1992
        34
    loshine1992  
       2016-10-21 17:18:47 +08:00
    @honeycomb
    问题不在是谁的责任,而是因为国内连不上所以只能靠第三方推送,第三方推送为了送达率就选择了联合唤醒
    woyaojizhu8
        35
    woyaojizhu8  
       2016-10-21 17:22:22 +08:00   ❤️ 2
    @st2udio
    @honeycomb
    @cairnechen
    @Chrisplus
    @sylecn 把什么锅都推到 gcm 无法连接上。。。有几个应用真能推送一些有用的信息啊,这分明就是为了让自己的广告霸占通知栏而无视用户体验和用户对手机所有权的行为。
    seashell
        36
    seashell  
       2016-10-21 17:41:06 +08:00
    @queuey 比 Windows Phone 还辣鸡还自闭?
    depress
        37
    depress  
       2016-10-21 17:45:15 +08:00
    我就想知道 Chrome 启动广东移动和 Google Play 服务启动澎湃新闻、什么值得买是什么鬼...
    Drops
        38
    Drops  
       2016-10-21 17:50:00 +08:00
    总结一下:千错万错,其实最后都是墙的锅
    honeycomb
        39
    honeycomb  
       2016-10-21 18:00:50 +08:00 via Android   ❤️ 1
    @woyaojizhu8

    是的,首先,试图推送不该推送的内容是原罪

    试图在通知栏放广告的,可以自己下架了

    然而推送应该推送的内容,还是得走 gcm ,这和 gcm 连不连得上没有很大关系

    @Drops 所以好几年前有人说墙是贸易壁垒,是有道理的
    vivagonna
        40
    vivagonna  
       2016-10-21 18:06:35 +08:00 via Android
    @honeycomb gcm 没被墙啊
    vivagonna
        41
    vivagonna  
       2016-10-21 18:07:10 +08:00 via Android
    @depress 同问
    vivagonna
        42
    vivagonna  
       2016-10-21 18:07:58 +08:00 via Android
    @woyaojizhu8 gcm 能连上啊,不用翻
    vivagonna
        43
    vivagonna  
       2016-10-21 18:08:54 +08:00 via Android
    @loshine1992 可是 gcm 并没被墙
    honeycomb
        44
    honeycomb  
       2016-10-21 18:54:48 +08:00 via Android
    @vivagonna gcm 的域名是 gcm-http.googleapis.com
    你说有没有墙(不考虑抽风)
    vivagonna
        45
    vivagonna  
       2016-10-21 19:11:25 +08:00 via Android
    @honeycomb 这个我倒是没研究过,但是我手机上 WhatsApp 、 Beeper 等 app 不开 VPN 是可以及时收到信息推送的
    vivagonna
        46
    vivagonna  
       2016-10-21 19:12:04 +08:00 via Android
    @honeycomb 应该不是抽风,一直都可用
    yankebupt
        47
    yankebupt  
       2016-10-21 20:06:28 +08:00 via Android   ❤️ 1
    @vivagonna 不翻可以接到通知,但必须开一次才能把 app 的通知挂在那上面,而且还指不定哪天挂掉还要重新注册一下,你说怎么办好
    vivagonna
        48
    vivagonna  
       2016-10-21 20:08:45 +08:00
    @yankebupt 开一次是指开 app ?系统启动的时候好像自动会把 app 开一次啊
    GoldenLee
        49
    GoldenLee  
       2016-10-21 20:13:14 +08:00 via Android
    @beimenjun 看过推送 api 就知道,唤醒别人和被唤醒是一个开关的。
    twoyuan
        50
    twoyuan  
       2016-10-21 20:16:56 +08:00
    @xuejinwei 你看他截图里还有 Chrome 启动广州移动……惊呆了 😂
    EricCartman
        51
    EricCartman  
       2016-10-21 20:52:14 +08:00 via Android   ❤️ 1
    国产皆垃圾,根源就是 gfw
    vvdvdsv
        52
    vvdvdsv  
       2016-10-21 21:13:11 +08:00
    相互唤醒自启动---推送垃圾消息---好讨厌---系统或者第三方软件禁止自启动---咦,我的发货通知怎么没有了?--打开 app 弹了出来---安卓好垃圾---换 iphone

    app 总是自启动霸占后台还相互唤醒---卸载---又要用到啊---重新装一遍---用完就卸载---再清理一下垃圾----循环

    app 总是自启动霸占后台还相互唤醒---冰箱或者绿色守护---要 root 呢---花了半天终于搞定---要不再装一个 xposed 吧--还可以自定义呢---my android tools 调教一下还可以更加省电哦----赶紧研究一下---哇,换个 ROM 占用内存更小啊---换哪一个好一点呢----循环
    librae
        53
    librae  
       2016-10-21 21:19:36 +08:00 via iPhone
    推荐 即刻 定制推送,卸载能卸载的所有垃圾应用。
    ps: 并非该团队相关人员,单纯推荐
    VYSE
        54
    VYSE  
       2016-10-21 21:45:52 +08:00 via Android
    绿色守护看看 GOOGLE PLAY SERVICE 的唤醒就知道各家都是各自为战搞自己的一整套生态,所以安卓比苹果重很多,习惯就好,解法 DIY 下还是很多的
    vivagonna
        55
    vivagonna  
       2016-10-21 21:58:47 +08:00 via Android
    @vvdvdsv 试试 island
    Khlieb
        56
    Khlieb  
       2016-10-21 23:07:51 +08:00 via Android
    @EricCartman 不光是 gfw ,还有个特殊的利益集团, gfw 现在看起来是给这个利益集团打伞的
    loshine1992
        57
    loshine1992  
       2016-10-21 23:53:55 +08:00
    @vivagonna
    你使用中没被墙并不代表全国所有用户都没被墙,哪怕只有少数人群无法使用 gcm ,那对 App 的推送来说也是致命的影响。
    SoloCompany
        58
    SoloCompany  
       2016-10-22 01:25:08 +08:00
    说的好像没有墙的 instagram 就不会唤醒 facebook 似的,谁又比谁更干净呢
    honeycomb
        59
    honeycomb  
       2016-10-22 01:33:13 +08:00 via Android
    @SoloCompany 是的, facebook 系是一个国外应用里不好的典型。
    bbt
        60
    bbt  
       2016-10-22 02:34:54 +08:00 via Android
    @fearme 你可以看下 ios 的后台进程。半斤八两
    ssynhtn
        61
    ssynhtn  
       2016-10-22 02:57:48 +08:00 via Android
    这些只是推送而已,对某某 app 的唤醒 or 关键启动一般只是启动一个后台同步的 service ,占用资源较少,因为 service 没有用户界面。
    iOS 上也是如此,苹果的推送服务一直在后台不停地工作,只是苹果的推送消极一些, app 没有同步 service ,必须要点进 app 才会进行同步操作,代价是 iPhone 的推送总是毛病多一点。
    yankebupt
        62
    yankebupt  
       2016-10-22 13:28:20 +08:00
    @Khlieb 嗯...最直接的就是各运营商......gfw 不知道省了多少国际出口带宽......就为了省那些钱估计就会有人宁可被骂政治走狗也想继续做下去...
    xcodebuild
        63
    xcodebuild  
       2016-10-22 16:22:54 +08:00
    大多是 SDK 关联启动,不过现在国内的 ROM 基本也都有应对方案了,尤其是针对某些根本不需要推送的应用。
    Khlieb
        64
    Khlieb  
       2016-10-22 22:48:15 +08:00 via Android
    @yankebupt 不光是那么简单,有人宁愿自己做到很烂很龌龊也不希望看到自己奶酪被动了
    flynaj
        65
    flynaj  
       2016-10-22 23:37:08 +08:00
    这个就是 miui 说的葫芦链, miui 神隐模式可破!
    GTim
        66
    GTim  
       2016-10-23 10:07:36 +08:00
    @ssynhtn android 的毛病更多哇
    GermXu
        67
    GermXu  
       2016-10-23 11:41:43 +08:00
    @flynaj 表示并没有什么用, 平时倒不会乱推送消息,但是依然葫芦娃, 比如开淘宝时候高德地图支付宝的消息准时上屏
    woyaojizhu8
        68
    woyaojizhu8  
       2017-03-12 14:41:27 +08:00
    @honeycomb 真能推送用户需要的内容的话,长驻通知栏不就行了?用户需要你的推送通知,自然不会杀你的进程
    honeycomb
        69
    honeycomb  
       2017-03-12 16:24:25 +08:00
    @woyaojizhu8
    没有必要常驻通知栏是不可以的,因为这个时候应用处于前台,不受到 doze 等一系列控制功耗设定的限制
    woyaojizhu8
        70
    woyaojizhu8  
       2017-03-12 22:24:58 +08:00
    @honeycomb 嗯嗯,所以我认为它如果能推送用户需要的内容的话(极少应用才需要),就有必要常驻通知栏。 GCM 也是我不喜的,应用向我推送内容,凭什么要通过 google 的服务器呢?我的原则是“尽量减少中间人”。
    honeycomb
        71
    honeycomb  
       2017-03-13 00:02:50 +08:00 via Android
    @woyaojizhu8
    因为它是在一个围墙花园里运行,就要守围墙花园的规矩,这些规矩在事后(指的就是 iOS 的那套推送机制)证明是有利于生态系统的。

    就推送的规矩来说,如果每个应用都使用“自己的“服务器,在电量消耗上是不可接受的。因此所有的应用都应该使用相同的推送基础架构。

    至于经由(从应用看来的)第三方的 GCM ,如果应用不使用 GCM 的话它几乎也不会选择自有的服务器(除非是微信这样的通信类 app ),而目前的第三方推送商都在做 1 ,前述的电量消耗上不可接受的方法。 2 ,第三方推送服务是导致关联启动的问题的重要原因。
    honeycomb
        72
    honeycomb  
       2017-03-13 00:04:08 +08:00 via Android
    @woyaojizhu8
    所以这个原则尽管是非常有道理的但通常不可能满足,既然这样(无法自建推送服务),那么就应当使用标准的,大家都在用的推送机制。
    woyaojizhu8
        73
    woyaojizhu8  
       2017-03-13 00:09:58 +08:00
    @honeycomb 可能我们看重的不同吧,我不怎么看重功耗
    honeycomb
        74
    honeycomb  
       2017-03-13 09:30:17 +08:00
    @woyaojizhu8

    这里的功耗指的是和待机时间非常相关的,你不用手机时候的功耗。
    就导致一个问题,你再是不看重功耗,这部分的耗电会明显地影响到你。

    举个例子:
    国内银行在 Android 上的客户端提供的云闪付功能的云闪付卡密钥的推送是通过 Giesecke & Devrient 搭建的平台完成的,这东西的 Android 推送非常耗电,跑一天可以消耗掉 300~500mhA 的电量。

    这样还怎么和 Apple Pay 竞争?
    woyaojizhu8
        75
    woyaojizhu8  
       2017-03-13 19:36:36 +08:00
    @honeycomb 我的使用习惯是,不用时关闭数据连接。我不需要所有的后台推送消息(包括 qq 微信)。而我周边的小白用户,他们有些一直开着数据连接,但所需要的推送也只有 qq 和微信(他们装的应用远不止这些,但是需要推送的就这两个)。当然还有很多应用会推送一些他们不需要的无用信息。
    还有一些比较会玩安卓的网友,他们也基本只需要 qq 和微信的推送(有些还会有支付宝),而且他们会用 my android tools 禁用其大部分服务,这样就很省电了。
    所以说:
    1.大部分人需要推送的应用真的很少;
    2.即使是需要推送的应用,维持基本的推送功能所需要的电量也不是很多,耗电主要还是由于应用在后台做一些对用户无益的事。
    因此没有必要为了省电而让所有推送通过 google 的服务器。
    最好的方法当然还是规范化推送,建立一个本地的统一的推送框架,用户可以手动禁止应用除推送以外的后台服务。因为已经标准化了,所以不用再用 my android tools 这种靠猜测、尝试来禁用服务,也不会误杀。应用在后台只有最基本的推送消息功能,也不怎么耗电。
    可以类比于 Imap Idle 协议( http://blog.sina.com.cn/s/blog_5d2184eb0100py1t.html ),本地推送框架就好像一个邮件客户端,应用需要推送功能就好像添加了一个支持 imap idle 的邮箱帐号一样,应用本身后台被禁止,无法再做多余的事。
    但是目前不存在这样一个框架,所以还是让需要推送的应用长驻通知栏为好。应用也应约束自己 ,不要开那么多对用户无益的服务。至于你提到的国内银行的云闪付卡密钥的推送,要么是它做了多余的事情,要么是为了更高的安全性需要这么复杂的功能因此需要耗这么多电。如果是为了安全性,那 GCM 也无法替代它吧。
    honeycomb
        76
    honeycomb  
       2017-03-14 09:24:29 +08:00
    @woyaojizhu8

    “耗电主要还是由于应用在后台做一些对用户无益的事”
    所以问题出在应用方,从 Android 6 开始出现的 Doze/App Standby 就是用来解决这件事的
    它们的作用大致上是关闭屏幕后应用在某种程度上不能运行后台任务 /联网。

    以上措施可以绕过,最简单的办法是把应用想时刻运行 service 的进程变更至前台,并利用漏洞(修复于 7.1)隐藏本应出现的持续通知。

    "最好的方法当然还是规范化推送,建立一个本地的统一的推送框架"
    已经有 GCM 了。 play 的政策也为必要时绕过 doze 等通过间断休眠达到的自动电量管理提供了许可。因此不需要第三方推送服务。苹果乃至小米的做法也证明了系统唯一推送服务是对所有人都有好处的。

    “应用在后台只有最基本的推送消息功能”
    这个特性依赖于系统的实现,国产 rom 做的比原生系统好,但是国产的做法是不通用的
    bclerdx
        77
    bclerdx  
       2018-04-05 22:23:02 +08:00
    关注中。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3202 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:25 · PVG 22:25 · LAX 07:25 · JFK 10:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.