【补充:刚看到华为Android相关的SDK,突然感受到华为在Android领域的深厚的技术积累,所以上两张图】
在一个技术从业者的角度看华为,牛掰佩服,这就是我的梦想呀!技术傍身披荆斩棘,格局宏大,战略深谋。
鱼翔浅底
鹰击长空,
万类霜天竞自由
希望我未来也能有这种类似精神和气质。
前言
最近好像着了拼夕夕的道了,成功成为拼夕夕重度用户,身为Android程序员,总觉得拼夕夕的更新App的频率有点低,不是有点低,在我手上半年没更新了,但是各种活动推陈出新,特别是最近我看到
一个之前原生UI界面的功能突然冒出来(多多钱包功能),当然这个可能是后台配置数据而来,之前的功能原来就有,但是这个引起了我研究大厂App的兴致,撸起袖子开赶,把之前知道的反编译知识在捡起来用用。
拼多多
当然第一个下手的就是拼多多了
异常捕获 xCrash 2019 年由爱奇艺在 GitHub 上开源。
偏底层优化
-
相比于 Android 官方原始 MultiDex 方案,它能够减少 80% 以上的黑屏等待时间
MMKV 基于 mmap 的高性能通用 key-value 组件
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源。
官方提供的性能对比图,这个有点凶残了,哈哈
-
官方描述:xhook 是一个针对 Android 平台 ELF (可执行文件和动态库) 的 PLT (Procedure Linkage Table) hook 库
感觉有点吊so库都能hook感兴趣的小伙伴可以看看
J2V8 不知道拼多多是否在Javascript引擎上做了优化,也可能是第三方引用
J2V8是一套针对谷歌的V8 Javascript引擎的java绑定。J2V8的开发为Android平台带来了高效的Javascript的执行环境
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
-
WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。
调试运营维护
LDNetDiagnoService_Android
利用ping、tcp connect和traceroute的原理,对指定域名(通常为后台API的提供域名)进行网络诊断,并收集诊断日志
dexcount-gradle-plugin Android Studio 如何查看Android App的方法总数
tinker 不出所料拼多多使用的是腾讯的tinker作为热修复工具,但是不知道是我的原因还是手机的原因,我在本公司项目中使用华为和三星手机都是升级失败,而且还有致命的生效问题有时候把应用杀掉3-4次才生效,毕竟支持UI相关的资源更新,这个避免不了提高复杂的度,使生产环境下升级成功率低。故我还是选择Android——Sophix热修复接入 成功率高点,试了几次都成功,绝对能解决老板发现bug夺命连环call,或者致命bug世界末日
【画重点·经验之谈】在一些核心的功能上尽量考虑充分各种情况,有条件必须准备plan B,在不生效的情况下能救你一命,o(╥﹏╥)o。😎
UI布局相关
lottie-android airbnb json 文件转换成动态图片的库
Virtualview-Android 包名com.tmall.wireless.virtualview 天猫也就是阿里开源的库,想不到这两个劲敌在这里合作了,O(∩_∩)O哈哈~
主要功能:Android 和 IOS都支持,动态下发XML模板数据动态刷新UI
官方描述:
- 一份模板,两端支持。
- 提供基础的原子控件与容器控件,支持加入自定义组件。
- 支持一种虚拟化实现控件的协议,在模板里混合使用虚拟控件和实体控件。
- 支持在模板里编写数据绑定的表达式。
- 支持在模板里写事件触发的逻辑表达式。
- 提供配套的开发工具,辅助模板开发工具。
vlayout 又一个阿里开源的库
-
FlexboxLayout is a library project which brings the similar capabilities of CSS Flexible Box Layout Module to Android.
常用第三方SDK
QQ/微信/支付宝支付
-
Android SDK以Jar包形式提供,封装了QQ登录的登录授权以及大部分OpenAPI及社交渠道的分享、邀请、请求礼物、挑战炫耀、语音、应用评价、好友召回、获取附近的人API,移动应用只需要修改少量代码,即可快速实现QQ登录功能,并可调用平台 提供的OpenAPI及社交渠道API的功能。
主要提供的功能接口有:登录、注销、邀请好友、应用分享、获取用户信息、获取用户相册列表、发送分享、发表说说、上传图片、创建相册、设置QQ头像、增量授权、分享消息给QQ好友、发送带图微博发送请求、赠送礼物、发送挑战、炫耀等功能,Andriod_SDK_V2.1新增了好友召回,获取附近也在玩该应用的人等新功能。具体修改可参考《接口调用说明》文档。 【推送】小米推送/hentap(OPPO)推送/vivo推送/魅族推送/腾讯信鸽推送
wechat-sdk-android-without-mta:+ 是微信提供给第三方sdk(支付、登录和分享等)
腾讯移动分析 MTA 接入文档 没用过,但是bugly上面有提供相识的功能
腾讯移动分析有专业的移动应用数据分析能力,为您的应用提供实时数据统计分析服务,监控版本质量、渠道状况、用户画像属性及用户细分行为,通过数据可视化展现,协助产品运营决策。
-
官方【自卖自夸】大小250k完全可接受
1) 速度快:相比系统webview的网页打开速度有30+%的提升;
2) 省流量:使用云端优化技术使流量节省20+%;
3) 更安全:安全问题可以在24小时内修复;
4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
7) 功能全:在Html5、ES6上有更完整支持;
8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
9) 视频和文件格式的支持x5内核多于系统内核
10) 防劫持是x5内核的一大亮点
Github Mars
官网 Mars Android 接入指南【官方说明】跨平台
- comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等;
- xlog:高可靠性高性能的运行期日志组件;
- SDT: 网络诊断组件;
- STN: 信令分发网络模块,也是 Mars 最主要的部分。
facebook SDK 感觉这个功能应该提供给在中国的外国人使用的,大厂就是考虑周全👍
华为SDK
特意单独列出华为SDK这么多年学Android,一直没有觉得华为在Android软件领域有和阿里腾讯的影响力,这次学到了,而且华为开源的一下SDK都是很有深度的,这里必须👍👍(点赞三连)
-
HUAWEI HiHealth 开放华为在运动健康领域的专业能力,为开发者提供了一个数据接入和服务汇聚的开放平台,满足各行各业的合作伙伴在运动健康方面的需求场景。
HiAI
其他
IPCInvoker start 个数不多而且是个人维护,这个应该是拼多多初期沿用至今的。 IPC通信建议使用爱奇艺开源维护的Andromeda 使用相对简单
基于Service的IPC通信
IPCInvoker就是一个用来简化跨进程调用的组件,IPCInvoker底层也是通过AIDL实现的,只是把接口封装得更加容易使用
学习过程偶遇
优化
用于快速找到高耗时方法,定位解决Android App卡顿问题。通过gradle plugin+ASM实现可配置范围的方法插桩来统计所有方法的耗时,并在浏览器提供友好的界面展示,支持耗时筛选、线程筛选、方法名筛选等。
工具
- HMS Scankit 超简单集成华为HMS Scankit扫码服务实现扫一扫二维码 比zing识别率搞
附录
华为联盟开放的服务一览表 【重点研究】很多有趣的内容,可以研究刷一遍
CSDN 官网 DevEco 华为在CSDN的一个官方博客,提供了一下比较详细的教程