共享代码衍生多款应用的定制框架之经验分享

阿木的花园

2019/06/25 发布于 编程 分类

文字内容
1. 共享代码衍⽣生多款应⽤用 的定制框架及经验分享 邵辉/Software Engineering Lead
2. ⼤大纲 • 背景 • ⽅方案⼀一:Shared library • ⽅方案⼆二:Flavor • 定制技术 • 经验分享 • Demo
3. 背景 • 发布多款类似应⽤用 • 同⼀一应⽤用的demo和full版本
4. 成果 - 三款不不同⻛风格的应⽤用 GoBank Card Green Dot Card Walmart MoneyCard
5. ⽅方案⼀一:Shared Library ProductA (module) … ProductN (module) 1.编译依赖 2.复制FeatureConfig.java 3.Android Resource Overlay Shared Library (module)
6. 优缺点 ➢ 优点 • ➢ 成熟常⽤用的Library模式 缺点 • 不不⽀支持在同⼀一Android Studio中切换产品 • 不不⽀支持使⽤用产品⻛风格来渲染预览共享的layout • 需要打开多个⼯工程,⽆无法统⼀一查找代码和资源引⽤用 • 不不利利于Unit Test和Lint检查 • 需要拷⻉贝产品配置⽂文件
7. ⽅方案⼆二:Flavor module main 1. 定制FeatureConfig.java 2. Android Resource Overlay FlavorA … FlavorN
8. 优缺点 ➢ ➢ 优点 • 可在同⼀一Android Studio下切换产品 • 多产品共享同⼀一build.gradle • ⽀支持使⽤用产品⻛风格来渲染预览共享的layout 缺点 • 依赖于Android gradle tools
9. 定制技术 • Android Resource Overlay定制资源 • FeatureConfig.java定制功能集 • config.xml定制功能集 • 定制AndroidManifest.xml • Intent启动产品特有Activity • 利利⽤用config值定制界⾯面
10. 定制资源 main Context (main) 访问资源id extends overwrite FlavorA res (drawable, layout, string, style, dimens, config, etc)
11. 定制资源
12. FeatureConfig.java定制功能集 FeatureConfigDefault (main) Java (main) 访问Feature值 extends overwrite FeatureConfig (FlavorA) FeatureConfig.java
13. config.xml定制功能集 main Context (main) 访问Feature值 extends overwrite FlavorA config.xml
14. 定制AndroidManifest.xml
15. Intent启动产品特有Activity main Intent启动Activity (main) 访问action name overwrite main update FlavorA FlavorA config.xml AndroidManifest.x ml
16. 利利⽤用config值定制界⾯面 main 显示打开⽹网⻚页 的按钮 (main) url != “” overwrite FlavorA config.xml
17. 经验分享 • 产品资源与共享资源⽬目录使⽤用相同后缀,i.e. layout-xhdpi • 修改共享代码时考虑所有产品 • 统⼀一各个产品界⾯面元素的style资源引⽤用 • 不不使⽤用颜⾊色名命名资源ID • 产品中分离覆写的共享资源和特有资源
18. 经验分享 • 尽量量少添加产品特有代码 • 尽量量少使⽤用反射机制 • 集中管理理产品定制配置开关 • 开启proguard去除⽆无效代码 • 在CI中对所有产品运⾏行行Unit Test和Lint等
19. Demo
20. Demo • https://github.com/hshaoGitHub/Android-Customization-Demo/tree/ master/Library-Solution • https://github.com/hshaoGitHub/Android-Customization-Demo/tree/ master/Flavor-Solution