Gradle个性化配置

1. Gradle简介

gradle使用的是JVM语言groovy编写,类似的JVM语言还有新出的Kotlin语言。

2. 添加自定义编译类型

Android编译apk类型默认有release和debug两种比那一类型,这里可以自定义另一个种类型,例如给测试人员使用的测试包qa
在buildTypes里面增加一种类型,名字自起
buildTypes{
release{
    ...
}
debug{
    ...
}
qa {
      initWith debug//默认使用debug模式的配置参数
}
}

3. 自定义生成apk的文件名和路径

利用gradle可以修改apk的路径和文件名,

 def outputPathName = "app.apk"//apk输出路径

这里在外层自定义一个路径,可以使用相对路径,也可以是绝对路径。这里包含了自定义文件名,可以使用拼接字符串的方式定义文件名
建议使用相对路径,这样避免在不同机器编译报错问题。
然后可以在不同buildTypes里面赋值outputPathName,这样在不同环境在不同路径了。

 qa {
            initWith debug
            outputPathName = "qa_" + defaultConfig.versionName + "_" + getDate() + ".apk"
        }

def定义的方法和android和dependencies同级,类似java的变量定义

//获取时间戳
def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmm')
    return formattedDate
}

4. 不同环境下使用不同的服务器地址

一般我们会在java的常量文件定义服务器域名,在不同环境切换域名地址。这里利用gradle的配置,可以在打不同的包自动生成不同域名。
gradle在编译后会自动生成BuildConfig.java文件,文件在app/build/generated/source/buildConfig文件夹类,不同的buildTypes会有不同的BuildConfig.java
我们现在不同的buildTypes下定义一个服务器域名

 qa {
     initWith debug
     outputPathName = "qa_"+defaultConfig.versionName + "_" + getDate() + ".apk"
     buildConfigField "String", "ENVIRONMENT", "\"http://xyl.com/ecom/\""
    }

这里地址注意下转义符号。
最后在我们的常量文件里面直接使用BuildConfig.ENVIRONMENT
如果有红杠杠是没事,编译就好,编译完就会在BuildConfig.java文件里面自动生成ENVIRONMENT常量了。
推荐一个gradle详情的blog http://www.jianshu.com/p/9df3c3b6067a
膜拜下大神

下面是楼主使用的完整build.gradle文件

apply plugin: 'com.android.application'//提供了Android 编译、测试、打包等等的所有task。
def outputPathName = "app.apk"//apk输出路径
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    signingConfigs {
        myconfig {
            keyAlias 'key0'
            keyPassword '123456'
            storeFile file('test.jks')
            storePassword '123456'
        }
    }
    defaultConfig {
        applicationId "com.alivc.utilssample"
        minSdkVersion 21
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            buildConfigField "String", "ENVIRONMENT", "\"http://114.55.11.71:80/ecom/\""
            signingConfig signingConfigs.myconfig
            minifyEnabled false //混淆
            zipAlignEnabled true //Zipalign优化
            shrinkResources false // 移除无用的resource文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            outputPathName = "release_" + defaultConfig.versionName + "_" + getDate() + ".apk"
        }

        debug {
            minifyEnabled false //混淆
            zipAlignEnabled true //Zipalign优化
            shrinkResources false // 移除无用的resource文件
            signingConfig signingConfigs.myconfig
            buildConfigField "String", "ENVIRONMENT", "\"http://xyl.com/ecom/\""
            outputPathName = "debug_" + defaultConfig.versionName + "_" + getDate() + ".apk"
        }

        qa {
            initWith debug
            outputPathName = "qa_" + defaultConfig.versionName + "_" + getDate() + ".apk"
        }

    }

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            //开始输出

            output.outputFile = new File(outputPathName)
        }
    }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.2'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.squareup.okhttp3:okhttp:3.8.1'
    compile 'com.squareup.okio:okio:1.13.0'
}

//获取时间戳
def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmm')
    return formattedDate
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值