Professional Documents
Culture Documents
赵路路平
⽬目录
PART 01
框架演进历程
组件化实践
PART 02
保障平台与规划
PART 03
PART 01
框架演进历程
演进图
回归体验,满⾜足灵活 可维护性,开发效率
快速占领市场,速度
纯Native 部分动态化 Walle框架成型
快速发展,迭代快 AllInApp,⼤大平台,并⾏行行开发
Hybrid模式 插件框架
4
2013 2015
纯Native
业务代码 招聘 …
✦ 基础组件
✦ 快速搭建框架
SDK …
Hybrid模式-框架
动态框架
UIWidget
Cache
1. 缓存(html、js、css、image)
shouldInterceptRequest shouldInterceptRequest
ContentProvider (WebView webView, WebResourceRequest webResourceRequest)
(WebView view, String url)
2. 并⾏行行加载
ParcelFileDescriptor
AssetFileDescriptor
Thread(pipe)
图⽚片服务器器
WebView Thread(pipe)
Thread(pipe)
SDCARD
Hybrid模式-实践
✦ 如何管理理缓存⽂文件(版本号、超时间)?
1. ⽂文件名? key value
version 0.0.1
2. 数据库表?
time 2017-6-9
10:12:00
3. 放在⽂文件内容中
把内容转换成固定字节,保存到⽂文件头中,如下图
… …
标识 map⻓长度 key1⻓长度
…。。
key1值 val1⻓长度 val1值 key2⻓长度 …..
读取时:
WapperStream
client scared
InputStream
部分动态化
✦ 保留留了了动态部署能⼒力力
动态配置 hybrid
动态框架
模板管理理 Cache
主程序
房产
✦ 并⾏行行开发能⼒力力
招聘 记加班
业务代码 定位
✦ 动态升级能⼒力力
动态模板 web+native …
公共代码
network image map SDK
ActivityProxy+Context隔离
插件机制
os
HOOK
插件化-实践
✦ 进程问题?
B 固定进程数
A ⼀一个插件⼀一个进程
主业务间有依赖关系,
会出现进程数膨胀问题,
?
不不能杀死进程
不不可接受
C 合并单⼀一进程
会引起单例例问题,⽐比如
引⼊入Fresco时资源混乱
插件化-实践
✦ 代码共⽤用问题?
1. 单例例问题
不不共⽤用代码 共⽤用代码
2. apk包增⼤大
3. 插件之间交互变复杂之后联调成本增加
PART 02
组件化实践
开发周期
提升开发效率 按需加载
Walle框架结构
分享
登录
✦ 并⾏行行开发能⼒力力
房产
记加班
⾸首⻚页 招聘 定位
✦ 降低依赖层次
grade 保障
plugin 平台
✦ 提升编译速度
ROUTE web+native …
插件机制
WALLE network image
multidex
路路由中⼼心
✦ 为什什么要有路路由中⼼心?
房产 登录
路路由中⼼心
⼆二⼿手 ⽅方法调⽤用 定位
⻚页⾯面跳转
事件总线
IM
招聘
1. 代码和资源解耦,⽅方便便组件维护
2. 编译时可以随时去掉不不需要的组件,提升编译速度
路路由中⼼心实现
✦ wbmain://authority/path?query
✦ wbmian://component/{name}/{action}?{query}
… … …
client service
✦ ⽅方法级别的同步调⽤用
✦ 使⽤用简单、开发成本⼩小
路路由中⼼心实践
路路由虽好,但不不能滥⽤用
开发期流程
maven服务器器
按需下载wae
发布仓库
wae
⽣生成wae res 打包APK
classes.jar
assets/classes.dex
assets/compile.txt
独⽴立开发组件 编译⽂文件
apk
classes.dex
classes1.dex
aar ….
res resources.arc
classes.jar
开发期-发布wae流程
是 aar
编译⼯工程 是否包依赖库 获取所有依赖库 aar or jar 读取txt获取jar列列表
否 jar or aar
本库解压jar 是
jar+aar列列表
否存
dx⽣生成dex⽂文件 ⽣生成compile.txt
⽣生成wae⽂文件
✦ dex太⼤大怎么解决?
开发期-打包
wae wae…
assets/classes.dex assets/classes.dex …
assets/compile.txt assets/compile.txt
实例例:编译APK总⽤用时147s,下⾯面是各Task⽤用时
mergeDebugResources 10
11%
processDebugResourcces 7
transformClassesWithJarMergingForDebug 7
transformClassesWithMultidexlistForDebug 16 73%
transformClassesWithDexForDebug 85
✦ 跳过合成dex后,总时⻓长可缩短70%
Walle框架分析
深度插件化 ⽀支持 ⾼高 ⾼高 低 中 中 ⾼高 ⾼高
容器器化 ⽀支持 ⾼高 ⾼高 低 中 中 中 ⾼高
保障平台与规划
开发期-保障⽀支撑平台
⼯工具集 构建平台
代码仓库管理理 … Jenkins
质量量保障
✦ 合并流程⾃自动化 预合并分⽀支
(pre-release-7.11.0)
✦ 上线检查⾃自动化
⾃自动合并冲突检测
✦ 发版流程⾃自动化 不不通过
⾃自动编译
不不通过
静态代码审核 不不通过
RD
Sonar(lint、findBugs、checkstyle)
不不通过
⾃自动发布Wae包
版本分⽀支release-7.11.0
后期规划
资源 ⽬目前只⽀支持Dex的升级,后期可加⼊入
升级 资源的动态升级
编译 通过预编译资源可以进⼀一步加快编译
规划 速度 速度
细化 当前组件的粒度⽐比较⼤大,可以继续拆
拆分 分优化