Android组件化管理---build.gradle进阶知识

前提:要做好项目代码的各个版本数据控制管理,首先我们就得先学习gradle进阶的认知,毕竟平时我们开发也不重视gradle的脚本编写。

 

组件化管理---build.gradle进阶知识

1.项目依赖版本统一管控:

方式一:在project中创建统一的ext{}对版本数字进行控制:

然后针对module中的build.gradle统一使用这边的版本号:

当然注意将‘ ’引号换成“ ”,$才能正常使用。

三种写法,可以用最精简的方式写。

优势:项目可能有多个library工程,而且这些版本号会随着时间,新Android系统的发布而升级修改,为了省去一个个目录去修改版本号,在主目录下可以快捷而且不遗漏的更新所有版本号。而在组件化中方便切换项目的module类型等

缺陷:

在Android studio3.2.1中,如果你再创建cotlin的module,因为工具默认写法ext.kotlin_version = '1.2.71',就会导致拨错

强迫症不严重的就可以当创建module(cotlin)报错再过来修改为正常值,java工程无影响。

方式二:在project里gradle.properties配置方案:

先看配置属性:

 

然后调用:

这个方案就可以解决那些强迫症晚期的心头刺了(无意中自己也中枪了(*^▽^*)),在gradle.roperties中所有储存的都为String类型,这也就导致需要常用的类型转化。

这样就能方便快捷的整理版本号了。是不是少了很多烦恼。

扩展使用:

 

1.热修复扩展,直接在properties.gradle中设置一个TINKER_ENABLE来控制是否添加热修复插件功能

2.插件化扩展,控制依赖的lib库模块是否可以独立运行,控制是一整个apk运行或者是组件单独就可以运行。

 

常规的build.gradle进阶使用方案

1.秘钥的高端操作,方便编译

2.常用操作解析:

 

3.gradle的方法封装外放操作,简化gradle中的内容。

4.依赖三方库support:appcompat-v7红线提示

All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes

在Android 3.0后增加了新功能,

    api("com.alibaba:arouter-api:1.4.1") {
        exclude group: 'com.android.support' //处理appcompat-v7携带版本不同导致的报错
    }

exclude group将三方库中的冲突support所有库都排除

指定module:

    api("com.afollestad.material-dialogs:core:0.9.5.0") {
        exclude group: 'com.android.support', module: 'support-v13'
        exclude group: 'com.android.support', module: 'support-vector-drawable'
    }

补充建议:

另外还有一个建议,在我们自己创建library给别人使用时,如果需要依赖com.android.support的话,建议用provided的方式依赖(android studio3.0中更改为compileOnly),这样只会在编译时有效,不会参与打包。以免给使用者带来不便。

例:

    provided 'com.android.support:appcompat-v7:26.1.0'
    provided 'com.android.support:design:26.1.0'
    provided 'com.android.support:support-vector-drawable:26.1.0'

5.集合命名式封装依赖库

统一在project的根目录配置ext:

 

记录:生成名字特定的包.apk,如xxx+版本_日期.apk --> test1.1.0_20180108.apk,test1.1.0_20180108_debug.apk

目前我使用的两种:

1.

 //生成debug包和release包名字定义,release包:名称+版本+日期.apk,debug包:名称+版本+日期+debug.apk
    applicationVariants.all{ variant->
        variant.outputs.each { output->
            def oldFile = output.outputFile
            if(variant.buildType.name.equals('release')){
                def releaseApkName = 'test' + defaultConfig.versionName + '-'+buildTime()+'.apk'
                output.outputFile = new File(oldFile.parent, releaseApkName)
            }else {
                def debugApkName = 'test' + defaultConfig.versionName + '-'+buildTime()+'-debug.apk'
                output.outputFile = new File(oldFile.parent, debugApkName)
            }
        }
    }

def buildTime() {
    def df = new SimpleDateFormat("yyyyMMdd")
    df.setTimeZone(TimeZone.getDefault())
    return df.format(new Date())
}

2.

//第二种方法 -- 生成debug包和release包名字定义,release包:名称+版本+日期.apk,debug包:名称+版本+日期+debug.apk
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                if (variant.buildType.name.equals('release')) {
                    def fileName = outputFile.name.replace("app", "test" + "_v${variant.versionName}_${buildTime()}")
                    outputFileName = fileName
                } else {
                    def fileName = outputFile.name.replace("app", "test_debug" + "_v${variant.versionName}_${buildTime()}")
                    outputFileName = fileName
                }
            }
        }
    }
 

就先写到这里了,对看官有用请点赞,谢谢支持^_^

若想了解更多操作请评论留言。

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值