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
}