项目模块优化总结

项目模块优化总结

一、问题分析

  • 随着迅捷开发进行,破窗效应日渐明显,没有代码审查互检,为方便需求随意添加的资源和三方sdk,加重了项目构建压力,也增加了项目的体积
  • 老的框架已经不能负担插拔的需求,需要将新引进的aop和flutter做好隔离处理
  • 需要将开发和测试的版本区分开来,在保证开发的高效编译的前提下,又不能影响测试时项目的完备性

二、方案

1.结构设计

  • 将app层独立,可以保证app层独立运行,代码中需要的class可以通过中间件(仅与toolcore联系)或者aar拿到,从而实现与模块层断开链接

  • 需要资源独立,不能拿模块中的res

  • application中做好开关控制,当模块卸载时会引起异常的初始化要用开关控制

  • 这些模块的控制开关要做好isDev的总开关控制,可以一键控制好模块的集成

  • 这样做以后的模块需要替换的资源要整合到app层,以前用duiacore承接的,现在都合并了,app层的代码量和资源量增加

  • module的设计

  • 资源独立,每个模块需要给资源文件加上前缀防止和别的模块冲突,记得总结可以替换的颜色、文案、图片的命名,方便其他app集成

  • 数据通信,需要从app层获取的数据或操作可以通过初始化回调完成,或者通过广播完成

  • 对于模块比较大的,建议使用中间件进行隔离,因为即使有线上aar但项目在构建时文件越少资源越少构建越快

  • 对应没有中间件的模块,每次有api变动时(即app层有相关代码变动)都要重新打个新的aar发到mevan并变更本地依赖的版本

  • 建议需要提供模块的不同app,有个公用的工具module

  • 用来存放不同模块的中间件

  • 项目中的公共资源,ps图片,文案,颜色(建议用cl_小写英文和数值 命名)等,除色值用通用的命名外其他的资源需要加上前缀,防止冲突

  • 对于好用的工具代码,建议添加readme,向不用app展示成果,向开源致敬

2.gradle优化

  • 项目中目前tinker最高用到5.4.1 greendao最高用到5.6.4 项目若没有这些建议用最新的gradle体验急速
  • 项目中创建gradle.properties,优化参数
  • org.gradle.jvmargs=-Xms2048m -Xmx4096m//设置jvm内存
  • org.gradle.parallel=true//并行执行构建task
  • org.gradle.configureondemand=true//启用新的孵化模式
  • 项目下的build.gradle
  • buildscript中的repositories用来给gradle.plugin设置寻址的,主要优化下面的allprojects->repositories,让只有个别module用的地址就不要出现在这里了,可以放在module的build里,防止给sdk寻址时造成过多尝试
  • module下的build.gradle
  • android层设置aaptOptions {cruncherEnabled = false useNewCruncher = false}减少.9.png的检测
  • android层defaultConfig下resConfigs “zh-rCN”//string 只保留中文 还以减少drawable的引用
  • dependencies层下尽量使用implementation控制依赖关系,加速构建
  • dexoptions如下,线程数不能乱写,最多和cup的核数-1
dexOptions {
  //使用增量模式构建
  incremental true
  //最大堆内存
  javaMaxHeapSize "8g"
  //是否支持大工程模式
  jumboMode = true
  //预编译
  preDexLibraries = true
  //线程数
  threadCount = 4
}

3.分析task中耗时多的

  • aop的一般都是gradle.plugin中的task,只需要在开发情况下不依赖插件即可如mobtransform 和lancettranform
  • app:mergeDebugResources 和 app:mergeDebugjavaWithJavac这就只能减少res和class优化了
  • app:mergeDebugNativeLibs 这个可以在module build中指定ndk对应的平台如arm64-v8a

三、成果

  • 极限情况下(只剩app和工具module),先clean再build的构建速度提升80%(从8-10分钟到1-2分钟),项目体积从157M到40M
  • 改动一行代码再运行起来的平均时间从4分钟优化到40s左右

四、工具分享

  • sharesdk改为线上依赖后编译速度严重变慢,我通过查找项目中用到的class,用jar -cvf dev_share.jar *生成jar包用来做开发时隔离
  • flutter的隔离用到了flutter生成的flutter_embedding.jar来隔离
  • 对于这些只用来开发时加速的jar或aar,build.gradle中不要直接把libs都依赖,需要依赖指定文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值