【硬核】从新势力电商拼夕夕App洞察,电商App都需要引用什么库

补充:刚看到华为Android相关的SDK,突然感受到华为在Android领域的深厚的技术积累,所以上两张图

在一个技术从业者的角度看华为,牛掰佩服,这就是我的梦想呀!技术傍身披荆斩棘,格局宏大,战略深谋。

鱼翔浅底

鹰击长空,

万类霜天竞自由

希望我未来也能有这种类似精神和气质。

前言

最近好像着了拼夕夕的道了,成功成为拼夕夕重度用户,身为Android程序员,总觉得拼夕夕的更新App的频率有点低,不是有点低,在我手上半年没更新了,但是各种活动推陈出新,特别是最近我看到

一个之前原生UI界面的功能突然冒出来(多多钱包功能),当然这个可能是后台配置数据而来,之前的功能原来就有,但是这个引起了我研究大厂App的兴致,撸起袖子开赶,把之前知道的反编译知识在捡起来用用。

拼多多

当然第一个下手的就是拼多多了

  1. 异常捕获 xCrash 2019 年由爱奇艺在 GitHub 上开源。

    偏底层优化

  2. BoostMultiDex

    相比于 Android 官方原始 MultiDex 方案,它能够减少 80% 以上的黑屏等待时间

  3. MMKV 基于 mmap 的高性能通用 key-value 组件

    MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源。

    官方提供的性能对比图,这个有点凶残了,哈哈

  4. xHook

    官方描述:xhook 是一个针对 Android 平台 ELF (可执行文件和动态库) 的 PLT (Procedure Linkage Table) hook 库

    感觉有点吊so库都能hook感兴趣的小伙伴可以看看

  5. J2V8 不知道拼多多是否在Javascript引擎上做了优化,也可能是第三方引用

    J2V8是一套针对谷歌的V8 Javascript引擎的java绑定。J2V8的开发为Android平台带来了高效的Javascript的执行环境

    教程:Java 调用Javascript 输出Hello World!

  6. protobuf 【已经45.1k start可见这个应用范围有多广】是二进制存储 所以比 json传输更快 更易于跨平台开发 但是读写更麻烦,这个在Google开源的时候就知道了,但是身为Android开发没有机会推行这个技术,先记录下来,来一段网上的性能测试,激发一下实践冲动

    空间效率

    Json:107个字节

    Protobuf:32个字节

    时间效率

    Json序列化: 1ms , 反序列化:0ms

    Protobuf 序列化: 0ms 反序列化:0ms

    将public List list和repeated PhoneInfo phoneInfoList =3;都赋值为1000个PhoneInfo

    空间效率

    Json:4206个字节

    Protobuf:1332个字节

    时间效率

    Json序列化: 4ms , 反序列化:1ms

    Protobuf 序列化: 1ms 反序列化:0ms

    参考:protobuf在java, Android下的使用总结

  7. wcdb

    WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。

调试运营维护

  1. LDNetDiagnoService_Android

    利用ping、tcp connect和traceroute的原理,对指定域名(通常为后台API的提供域名)进行网络诊断,并收集诊断日志

  2. dexcount-gradle-plugin Android Studio 如何查看Android App的方法总数

  3. tinker 不出所料拼多多使用的是腾讯的tinker作为热修复工具,但是不知道是我的原因还是手机的原因,我在本公司项目中使用华为和三星手机都是升级失败,而且还有致命的生效问题有时候把应用杀掉3-4次才生效,毕竟支持UI相关的资源更新,这个避免不了提高复杂的度,使生产环境下升级成功率低。故我还是选择Android——Sophix热修复接入 成功率高点,试了几次都成功,绝对能解决老板发现bug夺命连环call,或者致命bug世界末日

    【画重点·经验之谈】在一些核心的功能上尽量考虑充分各种情况,有条件必须准备plan B,在不生效的情况下能救你一命,o(╥﹏╥)o。😎

UI布局相关

  1. lottie-android airbnb json 文件转换成动态图片的库

  2. Virtualview-Android 包名com.tmall.wireless.virtualview 天猫也就是阿里开源的库,想不到这两个劲敌在这里合作了,O(∩_∩)O哈哈~

    主要功能:Android 和 IOS都支持,动态下发XML模板数据动态刷新UI

    官方描述:

    • 一份模板,两端支持。
    • 提供基础的原子控件与容器控件,支持加入自定义组件。
    • 支持一种虚拟化实现控件的协议,在模板里混合使用虚拟控件和实体控件。
    • 支持在模板里编写数据绑定的表达式。
    • 支持在模板里写事件触发的逻辑表达式。
    • 提供配套的开发工具,辅助模板开发工具。
  3. vlayout 又一个阿里开源的库

  4. RoundedImageView

  5. flexbox-layout

    FlexboxLayout is a library project which brings the similar capabilities of CSS Flexible Box Layout Module to Android.

常用第三方SDK

  1. QQ/微信/支付宝支付

  2. 腾讯开发平台 Android_SDK

    Android SDK以Jar包形式提供,封装了QQ登录的登录授权以及大部分OpenAPI及社交渠道的分享、邀请、请求礼物、挑战炫耀、语音、应用评价、好友召回、获取附近的人API,移动应用只需要修改少量代码,即可快速实现QQ登录功能,并可调用平台 提供的OpenAPI及社交渠道API的功能。
    主要提供的功能接口有:登录、注销、邀请好友、应用分享、获取用户信息、获取用户相册列表、发送分享、发表说说、上传图片、创建相册、设置QQ头像、增量授权、分享消息给QQ好友、发送带图微博发送请求、赠送礼物、发送挑战、炫耀等功能,Andriod_SDK_V2.1新增了好友召回,获取附近也在玩该应用的人等新功能。具体修改可参考《接口调用说明》文档。

  3. 【推送】小米推送/hentap(OPPO)推送/vivo推送/魅族推送/腾讯信鸽推送

  4. wechat-sdk-android-without-mta:+ 是微信提供给第三方sdk(支付、登录和分享等)

  5. 腾讯移动分析 MTA 接入文档 没用过,但是bugly上面有提供相识的功能

    腾讯移动分析有专业的移动应用数据分析能力,为您的应用提供实时数据统计分析服务,监控版本质量、渠道状况、用户画像属性及用户细分行为,通过数据可视化展现,协助产品运营决策。

  6. TBS腾讯X5浏览器SDK 接入文档

    官方【自卖自夸】大小250k完全可接受

    1) 速度快:相比系统webview的网页打开速度有30+%的提升;

    2) 省流量:使用云端优化技术使流量节省20+%;

    3) 更安全:安全问题可以在24小时内修复;

    4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;

    5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;

    6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;

    7) 功能全:在Html5、ES6上有更完整支持;

    8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;

    9) 视频和文件格式的支持x5内核多于系统内核

    10) 防劫持是x5内核的一大亮点

  7. Github Mars
    官网 Mars Android 接入指南

    【官方说明】跨平台

    • comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等;
    • xlog:高可靠性高性能的运行期日志组件;
    • SDT: 网络诊断组件;
    • STN: 信令分发网络模块,也是 Mars 最主要的部分。
  8. facebook SDK 感觉这个功能应该提供给在中国的外国人使用的,大厂就是考虑周全👍

华为SDK

特意单独列出华为SDK这么多年学Android,一直没有觉得华为在Android软件领域有和阿里腾讯的影响力,这次学到了,而且华为开源的一下SDK都是很有深度的,这里必须👍👍(点赞三连)

  1. 华为推送 华为开发者联盟>HMS>资源中心>消息推送服务>集成SDK

  2. HUAWEI HiHealth

    HUAWEI HiHealth 开放华为在运动健康领域的专业能力,为开发者提供了一个数据接入和服务汇聚的开放平台,满足各行各业的合作伙伴在运动健康方面的需求场景。

    场景一:数据获取场景

    场景二:数据写入场景

  3. HiAI

其他

  1. IPCInvoker start 个数不多而且是个人维护,这个应该是拼多多初期沿用至今的。 IPC通信建议使用爱奇艺开源维护的Andromeda 使用相对简单

    基于Service的IPC通信

    IPCInvoker就是一个用来简化跨进程调用的组件,IPCInvoker底层也是通过AIDL实现的,只是把接口封装得更加容易使用

学习过程偶遇

优化

  1. MethodTraceMan

用于快速找到高耗时方法,定位解决Android App卡顿问题。通过gradle plugin+ASM实现可配置范围的方法插桩来统计所有方法的耗时,并在浏览器提供友好的界面展示,支持耗时筛选、线程筛选、方法名筛选等。

工具

  1. HMS Scankit 超简单集成华为HMS Scankit扫码服务实现扫一扫二维码 比zing识别率搞

附录