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

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

  •  
  •   tomato1111 · 29 天前 · 2211 次点击

    事情是这样的,自己有一个安卓 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 苟着。

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

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

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

    虽然测试结果是可以去除一些也不妨碍运行结果,但是这种面对黑盒做法,这种近乎于猜的方式移除权限本来就不靠谱。你移除了权限你甚至不知道会发生啥,会不会导致应用崩溃? 留下悬念发布应用? 这不相当于自己给自己挖坑吗
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3176 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 10:58 · PVG 18:58 · LAX 03:58 · JFK 06:58
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1