Android Gradle新增buildtypes以及编译前执行自定义task

众所周知,打包的需求千奇百怪,我们在打包时会遇到文件操作、版本定义、通过参数控制版本之类的需求。今天我们就来聊聊如何来实现这些需求……

1.添加buildTypes

一般我们通过gradle构建的命令是(之后为了简化,只写windows的):

gradlew build               # windows
./gradlew build              # unix,linux,mac os

打包命令是:

gradlew assembleRelease

有时候会要求多添加一种buildType,比如预发版、beta版,正式版这样的需求
我们就直接在buidtypes里面增加

/* 预发环境 */
preRelease {
    // 不显示Log
    buildConfigField "boolean", "LOG_DEBUG", "false"
    buildConfigField "String", "API_HOST", "${API_PRE_RELEASE_HOST}"//API Host
    minifyEnabled true //是否混淆
    //是否设置zip对齐优化
    zipAlignEnabled true
    // 移除无用的resource文件
    shrinkResources true
    //签名
    signingConfig signingConfigs.release
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

当我们打包时直接执行

gradlew assemblePreRelease

==PS 如果有其他的module,其它module的build.gradle中也必须包含这个buildtypes,否则会报错==

2.编译前执行自定义task

当我们在编译前需要执行一些自定义任务的时候,需要先定一个task。比如我这边一个需求是在打包前删除某些文件,然后在编译前调用它。

//自定义删除文件的任务
task deleteFile{
    File file = file('src/main/assets/fonts.png')
    file.delete()
    println("delete success")
}
//编译前调用,这里的preBuild是build任务已有的,使这个任务依赖deleteFile,这样在执行preBuild钱就会先执行deleteFile
preBuild.dependsOn deleteFile

3.编译传参

编译传参的原理很简单,就是通过构建命令将变量的值传入,这里有个案例,通过变量修改版本号:
先在gradle中用project.harProperty来做判断,如果不存在就使用默认值。

defaultConfig {
    applicationId "com.example.gradle"
    minSdkVersion 16
    targetSdkVersion 26
    versionCode 1
    versionName project.hasProperty('VERSION') ? VERSION : "1.0.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    signingConfig signingConfigs.config
}

想要使这个VERSION的值改变,可以在构建命令中传参,这样生成的package版本号就是传入的版本号了,用这个可以有很多想象空间。

gradlew assembleRelease -PVERSION=x.x.x

参考文章:Android使用Gradle命令动态传参完成打包,不需要修改代码

你可能感兴趣的:(安卓开发)