build.gradle:
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.regex.Pattern
configurations {
deployerJars
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4+'
}
}
apply plugin: 'android'
dependencies {
compile 'com.android.support:support-v4:18.0.0'
compile project(':libraries:google-play-services_lib')
compile project(':libraries:gradle-android-lib-sample')
compile files('libs/zip4j_1.3.1.jar')
}
def buildTime() {
def df = new SimpleDateFormat("yyyyMMdd'-'HHmm")
df.setTimeZone(TimeZone.getDefault())
return df.format(new Date())
}
def apkName = "AndroidGradle"
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
assets.srcDirs = ['assets']
}
}
signingConfigs {
debug {
storeFile file("debug.keystore")
}
release {
storeFile file("release.keystore")
storePassword "gradleandroid"
keyAlias "commercial"
keyPassword "gradleandroid"
}
}
productFlavors {
free {
packageName 'tutorial.jim.gradleandroid.free'
}
premium {
packageName 'tutorial.jim.gradleandroid.premium'
}
}
buildTypes {
release {
runProguard true
debuggable false
jniDebugBuild false
proguardFile getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
}
android.applicationVariants.all { variant ->
def manifestFile = file("AndroidManifest.xml")
def pattern = Pattern.compile("versionName=\"(.+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionName = matcher.group(1)
pattern = Pattern.compile("versionCode=\"(.+)\"")
matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = matcher.group(1)
if (variant.zipAlign) {
variant.outputFile = new File("apk/"+apkName+"-V"+versionName+"-"+versionCode+"-"+variant.name+"-"+buildTime()+"-unaligned.apk");
variant.zipAlign.inputFile = variant.outputFile
variant.zipAlign.outputFile = new File("apk/"+apkName+"-V"+versionName+"-"+versionCode+"-"+variant.name+"-"+buildTime()+".apk");
} else {
variant.outputFile = new File("apk/"+apkName+"-V"+versionName+"-"+versionCode+"-"+variant.name+"-"+buildTime()+".apk");
}
}
}
android.sourceSets.free {
res {
srcDir 'res'
srcDir 'res-free'
}
}
android.sourceSets.premium {
res {
srcDir 'res'
srcDir 'res-premium'
}
}
}
注意:针对AS1.0-gradle2.1以后上面的代码可能会有问题,下面是我项目中修改过的
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.regex.Pattern
apply plugin: 'com.android.application'
def buildTime() {
def df = new SimpleDateFormat("yyyyMMdd'-'HHmm")
df.setTimeZone(TimeZone.getDefault())
return df.format(new Date())
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.snscity.builddemo"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
signingConfigs {
release {
storeFile file('snscity.jks')
storePassword '1q2w5t4r3e'
keyAlias 'snscitytest'
keyPassword '1q2w5t4r3e'
}
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField "boolean", "SHOW_GREETINGS", "Boolean.parseBoolean(\"true\")"// java代码中可以通过如下方式获取 boolean isShowGreetings = BuildConfig.SHOW_GREETINGS;
}
debug {
applicationIdSuffix ".debug"
buildConfigField "boolean", "SHOW_GREETINGS", "Boolean.parseBoolean(\"false\")"
}
android.applicationVariants.all { variant ->
def manifestFile = file("src/main/AndroidManifest.xml")
def pattern = Pattern.compile("versionName=\"(.+)\"")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
def versionName = matcher.group(1)
pattern = Pattern.compile("versionCode=\"(.+)\"")
matcher = pattern.matcher(manifestText)
matcher.find()
def versionCode = matcher.group(1)
if (variant.buildType.zipAlignEnabled) {
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "apk/" + applicationId + "-V" + versionName + "-" + versionCode + "-" + variant.name + "-" + buildTime() + ".apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
} else {
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "apk/" + applicationId + "-V" + versionName + "-" + versionCode + "-" + variant.name + "-" + buildTime() + "-unaligned.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
productFlavors {
internal {
applicationId='com.snscity.builddemo.internal'
}
product {
applicationId='com.snscity.builddemo.product'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}