喷一下国内的安卓第三方服务 SDK - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tomato1111
V2EX    Android

喷一下国内的安卓第三方服务 SDK

  •  
  •   tomato1111 2019-03-25 11:57:17 +08:00 15898 次点击
    这是一个创建于 2394 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的,自己有一个安卓 app 很久没更新了,想着更新一下第三方 sdk。
    本来用的是友盟统计和蒲公英更新这两个,前者用于统计数据和查看应用错误,后者用于应用内更新。
    顺便这几天看到被谷歌收购的原 twitter 旗下产品 Fabric,也是一款应用统计和崩溃统计的产品。以及国内的后来者,腾讯的 Bugly。也都尝试引入应用试用了一会,在这谈谈几个感想。
    ( Bugly 主要体验了应用更新 sdk,没体验应用统计 sdk)

    SDK 集成体验

    用了 Fabric 基于 IDE 插件的自动集成方式,国内 SDK 可以说是完败。 当然 Fabric 的文档和界面都是英文的,可以说是跟国内 sdk 相比的主要一个缺点吧。另外也存在被墙疑问(不确定)

    Fabric 基本的集成根本无需看任何文档,它自动在你的项目中插入它的代码,也是可控的。国内的基本都是需要照着文档一步步下来。

    当然这点其实只是时间消耗多少而已,其实并非关键。

    SDK 功能区分 /粗粒度

    这点可以做的最优秀的还是 Fabric,崩溃统计 crashlytics 和应用统计 answers 是分开的。你可以单独集成一个。
    看看国内:
    友盟:应用统计内自带了崩溃统计,不过可以代码设置不捕捉错误。算还行吧。
    bugly: 应用更新自带崩溃统计,你没看错。。。就一个初始化入口,初始化后同时收集崩溃信息,无法单独设置关闭崩溃统计
    蒲公英:一个大 SDK 包含了崩溃上报,应用更新,用户反馈。不过令人稍感安慰的是每个功能都是单独设置开启的

    SDK 权限要求

    这个是我感受最明显的,是中外 SDK 差距的最大体现
    我的项目早在 n 年之前集成友盟的统计从而带入了 READ_PHONE_STATE 权限,但是这个权限是很重的,做安卓开发的肯定知道,这个属于重要权限,甚至会影响上架 play。而我自己根本没用到,所以这次更新心想着一定要去掉这个权限。

    首先看了友盟的最新 8.0.0 的文档,令人高兴的是友盟也意识到这个权限的重量,允许开发者去掉这个权限。这点至少做的还不错。
    友盟(统计):
    android.permission.ACCESS_NETWORK_STATE
    android.permission.ACCESS_WIFI_STATE
    android.permission.READ_PHONE_STATE (可去掉
    android.permission.INTERNET
    要求四个还能去掉最重的,可以说是相当优秀了

    蒲公英
    接着更新蒲公英 SDK ( 3.0.x),首先使用 gradle 直接集成在线 aar 的方式。看了一下 aar 中已经带全了要求的权限。这是什么意思呢? 就是你在 gradle 中用compile 'com.pgyersdk:sdk:3.0.3'集成蒲公英 sdk,假如你的 app 本来是白纸一张,那么这样集成直接给你带入:
    android.permission.ACCESS_NETWORK_STATE
    android.permission.INTERNET
    android.permission.READ_PHONE_STATE
    android.permission.ACCESS_WIFI_STATE
    android.permission.WRITE_EXTERNAL_STORAGE
    android.permission.RECORD_AUDIO
    android.permission.GET_TASKS
    android.permission.READ_LOGS
    android.permission.REQUEST_INSTALL_PACKAGES
    9 个权限!而且重要的是你无法更改,因为这些都是在 aar 包里的。
    不过蒲公英考虑到 Eclipse 这样的需求,提供了一个 jar 包,这样就允许开发者自己写权限,实测没有 READ_PHONE_STATE 也可以正常使用应用更新功能。 算是一个 workaround 吧

    Bugly(更新 sdk)
    bugly 是做的最差的,也是提供 aar 的包,为什么说最差呢,因为没提供 jar 包,你要用它的 sdk 必须全盘接受它的权限
    android.permission.READ_PHONE_STATE
    android.permission.INTERNET android.permission.ACCESS_NETWORK_STATE
    android.permission.ACCESS_WIFI_STATE
    android.permission.READ_LOGS
    android.permission.WRITE_EXTERNAL_STORAGE
    android.permission.REQUEST_INSTALL_PACKAGES
    嗯,7 个。。似乎比蒲公英还少两

    那么 Fabric 呢?
    同时集成 Fabric 的崩溃和统计两个功能,需要的权限是:
    android.permission.INTERNET
    你没看错,就这一个

    总结

    上面提到的权限里面,重权限有两个:READ_PHONE_STATE 和 WRITE_EXTERNAL_STORAGE,需要用户手动给予权限,而且这两个也是谷歌在打压的两个权限。实际上不使用这两个权限也能实现功能,只不过国内似乎都偷懒了。

    最终我更新的友盟了 8.0 统计 sdk,去掉了 READ_PHONE_STATE 权限。
    应用内更新体验了蒲公英的 3.0 和 bugly,但是由于 bugly 又给我带回了 READ_PHONE_STATE,只能排除。 而蒲公英 3.0 相比 2.4 做了大幅的不向前兼容的更新,最终还是放弃,继续使用蒲公英 2.4 苟着。

    26 条回复    2020-09-21 11:17:43 +08:00
    tomato1111
        1
    tomato1111  
    OP
       2019-03-25 12:05:34 +08:00
    要这么多权限的背后,其实国内用户真的毫无隐私可言。哎
    tomato1111
        2
    tomato1111  
    OP
       2019-03-25 12:11:08 +08:00   1
    补充:友盟是唯一文档中看到有考虑到 google play 合规问题的第三方 sdk 商,其他的真的丝毫没提到 google play
    kera0a
        3
    kera0a  
       2019-03-25 12:20:00 +08:00 via iPhone
    Fabric 没被墙,而且他统计的数据也是脱敏的,非常不错。
    友盟之类的统计我都是直接当广告一样 reject 掉
    CodeCommunist
        4
    CodeCommunist  
       2019-03-25 12:45:42 +08:00 via Android
    360 开源了一个,可以接入到自己服务器。而且 360 这个老流氓对监控很有一套,

    https://github.com/Qihoo360/ArgusAPM
    Lin0936
        5
    Lin0936  
       2019-03-25 13:03:47 +08:00   2
    不是,“文档和界面是英文”这也能成为缺点?
    tomato1111
        6
    tomato1111  
    OP
       2019-03-25 13:08:36 +08:00   1
    @Lin0936 不要杠谢谢,我个人觉得就是缺点。毕竟我英文也没好到母语水平。
    Lin0936
        7
    Lin0936  
       2019-03-25 13:09:44 +08:00
    @tomato1111 没有杠,只是奇怪,打扰了。
    nanaw
        8
    nanaw  
       2019-03-25 16:44:27 +08:00
    作为用户,有两个问题。
    一是如何快速识别应用是否携带了哪些 sdk,组件,壳之类的东西。这样可以快速辨别直接不装或者禁用网络使用。
    二是有什么办法能禁用这种统计?即使是崩溃日志也不应该在用户不知情的情况下随意上传(尤其很多应用还没有隐私协议)
    catalina
        9
    catalina  
       2019-03-25 16:49:02 +08:00 via Android
    给友盟点个赞。
    说实话国内这些 app 乱要权限基本上大部分都是这些 sdk 的锅。
    kuyuzhiqi
        10
    kuyuzhiqi  
       2019-03-25 16:58:29 +08:00 via iPhone
    不能这么说吧,看你应用在哪上架,国内大环境如此啊,更别说那些流氓 app 了
    CommandZi
        11
    CommandZi  
       2019-03-25 17:18:59 +08:00
    百度移动统计已经不提供 无 IDFA 版本了。腾讯云通信 SDK 坑得没边了。
    qf19910623
        12
    qf19910623  
       2019-03-25 17:50:15 +08:00
    Fabric 啥权限都不要,是怎么实现统计的,奇怪,至少也得拿一下设备号吧
    finab
        13
    finab  
       2019-03-25 18:02:01 +08:00
    @qf19910623 他们不统计敏感信息
    love4taylor
        14
    love4taylor  
    PRO
       2019-03-25 18:04:15 +08:00
    但是国内这堆 sdk 依旧到处拉屎. 即使是友盟...
    HongJay
        15
    HongJay  
       2019-03-25 18:32:00 +08:00
    fabric 不墙是开玩笑的吧。。我怎么拉不下依赖
    tomato1111
        16
    tomato1111  
    OP
       2019-03-25 21:45:08 +08:00
    @qf19910623 因为需要权限才能获得设备 id,sim sn, mac 地址等敏感信息
    但是如果你先要设备序列号,品牌,制造商,设备名是完全不需要权限的
    要识别一台设备可以做到不使用权限,国内太喜欢读全部信息了
    yufz
        17
    yufz  
       2019-03-26 00:02:35 +08:00 via Android
    从其他依赖继承过来的依赖是可以去掉的,去查一下吧...
    yufz
        18
    yufz  
       2019-03-26 00:03:38 +08:00 via Android
    ↑继承过来的权限声明↑
    mmdsun
        19
    mmdsun  
       2019-03-26 07:29:05 +08:00 via Android
    我用 App center 感觉还行。

    https://visualstudio.microsoft.com/app-center/
    bluzz
        20
    bluzz  
       2019-03-26 09:02:57 +08:00 via Android
    @tomato1111 8.1 之后序列号也要权限了
    dalieba
        21
    dalieba  
       2019-03-26 09:49:44 +08:00 via Android
    情报法来了解一下
    Seney
        22
    Seney  
       2019-03-26 10:49:40 +08:00
    来用 App Center 吧,功能全面,云端构建,云端测试,多人协作,中文文档,微软背书,社区丰富,在线 support。
    little_cup
        23
    little_cup  
       2019-03-26 10:55:01 +08:00
    @jinyang656 能去掉不等于可以运行。当然确实可以通过编译时修改帮他们 debug,但这成本太高昂了。
    yufz
        24
    yufz  
       2019-03-26 12:14:20 +08:00 via Android
    @little_cup 是个问题,用过友盟、mob、有赞等等大部分是可以跑的,因为用户本来也有能力关闭这些权限
    tomato1111
        25
    tomato1111  
    OP
       2019-03-27 01:56:51 +08:00
    @jinyang656 你这样说不对,首先这些 sdk 商声明你要加这些权限,其次在提供的 aar 包里又已经加了这些权限。也没具体讲那些权限是可以去除的,甚至有些直接写明这些全是必要的。更没提如何去除添加依赖引入的权限。

    虽然测试结果是可以去除一些也不妨碍运行结果,但是这种面对黑盒做法,这种近乎于猜的方式移除权限本来就不靠谱。你移除了权限你甚至不知道会发生啥,会不会导致应用崩溃? 留下悬念发布应用? 这不相当于自己给自己挖坑吗
    yuhanle
        26
    yuhanle  
       2020-09-21 11:17:43 +08:00
    App Center 在国内最近无法访问,有其他可以替代的更好的产品吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5312 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 03:52 PVG 11:52 LAX 20:52 JFK 23:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86