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