组件化策略-Gradle优化

本文探讨了组件化的概念和目的,重点介绍了Gradle优化策略,包括使用project对象配置、统一管理lib版本信息以及实现分模块编译,以提高开发效率和减少编译时间。通过流程图展示了优化过程,强调了思维模式在提升开发效率和团队绩效中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

前言

何为组件化?

解耦与聚合
主要 是代码优化,却不限于代码。
程序员需要 理解整个工序流程,对优化的主体进行拓展。

Think Outside Of The Box

这是对效率的思考,对组织形式的思考。拓展探索现阶段效率的瓶颈。

本文从Gradle的角度去考虑这个问题。

Gradle基础

每个build.gradle是个project对象,Gradle管理着project对象的生命周期。
在这里插入图片描述
一、初始化读取settings.gradle,圈定 需要include的module
二、根据gradle生成的索引树,配置project对象,产生tasks。
三、Gradle根据tasks执行相关依赖任务

Gradle优化

每个module都有build.gralde,不同build.gradle的buildToolsVersion、buildToolsVersion等可能会不一样。

这里需要统一的引用

一:避免sdk不一致导致的资源重复、包量增大
二:避免编译效率降低,编译时长增加

使用project对象配置

新建config.gradle文件,并配置基础信息
/**全局配置信息及第三方依赖统一管理*/
project.ext {
    //统一设置APP配置
    setDefaultConfig = { extension ->
        //相对于APP中的build.gradle android {}的内容
        extension.android {
            compileSdkVersion rootProject.compileSdkVersion
            buildToolsVersion rootProject.buildToolsVersion
            defaultConfig {
                minSdkVersion rootProject.minSdkVersion
                targetSdkVersion rootProject.targetSdkVersion
                versionCode getAppVersionCode()
                versionName rootProject.versionName

                testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            }
        }
    }
}

当然在这里,可以进行各种其他配置。
比如setAppDefaultConfig、setLibDefaultConfig、setAndroidConfig进行分别的配置

在各个module中进行引用

在这里,通过调用project.ext获取setDefaultConfig的配置,传入project。

apply from: "${rootProject.rootDir}/config.gradle"  //#这里进行了import
android {
    project.ext.setDefaultConfig project
}

分开编写共性,为公共库添加引用,可以尽可能的抽取共性逻辑,减少统一修改的地方。

统一管理lib库版本信息

在project的build.gradle中进行基础设置的设置。
buildscript {
    //使用这种统一的依赖定义,ide会主动提示版本升级,如果放在config.gradle ide就不会主动提示版本升级
    ext {
        compileSdkVersion = 28
        buildToolsVersion = '27.0.3'
        minSdkVersion = 21
        targetSdkVersion = 26
        versionCode = 1
        versionName = "1.3.6"
        applicationId = "com.wangxueming.demo"
        androidSupportSdkVersion = "27.1.1"

        multidex = '1.0.2'
        constraintLayoutVersion = '1.1.1'
        butterknifeVersion = '8.4.0'
        glideVersion = '4.5.0'
        retrofitVersion = '2.3.0'
        arouterApiVersion = '1.2.4'
        arouterCompilerVersion = '1.1.4'
        arouterAnnotation = '1.0.4'
    }
}

所有的lib有统一的版本管理

避免lib多版本混乱,冲突
减少包大小、减少编译时间

分模块编译

根据组件化的思维,程序员只需要管理 当前需要的功能,module分而治之。

在project的build.gradle配置所有的模块信息
buildscript {
    //使用这种统一的依赖定义,ide会主动提示版本升级,如果放在config.gradle ide就不会主动提示版本升级
    ext {
        buildWholeApp = true
        //注意这里只有当buildWholeApp=false时,设置下面的子模块才有用
        buildModuleLogin = false
        buildModuleFirstPage = false
        buildModuleAbout = false
        buildModuleAccount = false
        buildModuleMy = false
        buildModuleCommon = false
     }
}
功能module进行独立引用
if (!Boolean.valueOf(rootProject.ext.buildWholeApp)
        && Boolean.valueOf(rootProject.ext.buildModuleLogin)) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}

这样就能独立进行编译单独的module

当然,module独立成app进行编译。还需要配套的AndroidManifest以及Application

android{
    sourceSets {
        main {
            if (!Boolean.valueOf(rootProject.ext.buildWholeApp)) {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                java {
                    //排除java/debug文件夹下的所有文件
                    exclude '*debug'
                }
            }
        }
    }
}

在android中,配置AndroidManifest的切换,从而达到module独立成application编译的效果

大幅减少编译时间。

来看下流程图

在这里插入图片描述

小结

改善工作环境 ->改善人的状态 -> 提高工作效率 -> 提升单位产出 -> 绩效提升、幸福感提升

思维模式 很大程度 决定的 思考高度

大部分人都可以站在略微 高一点的高度去思考

熟悉代码的量级、代码规范、工程结构、人员配置,才能切合实际的提升开发和工作方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值