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

2019-03-25 11:57:17 +08:00
 tomato1111

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

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

虽然测试结果是可以去除一些也不妨碍运行结果,但是这种面对黑盒做法,这种近乎于猜的方式移除权限本来就不靠谱。你移除了权限你甚至不知道会发生啥,会不会导致应用崩溃? 留下悬念发布应用? 这不相当于自己给自己挖坑吗
yuhanle
2020-09-21 11:17:43 +08:00
App Center 在国内最近无法访问,有其他可以替代的更好的产品吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/548241

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX