shakalaca
9/3/2013 - 11:48 AM

move & rename APK files

move & rename APK files

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.6'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.7'
}

apply plugin: 'android'

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    buildTypes {
        debug {
            packageNameSuffix ".debug"
            versionNameSuffix "-SNAPSHOT"
        }
    }
}

android.applicationVariants.all { variant ->
    variant.assemble.doLast {
        rename_and_moveout_apk(variant)
    }
}

def rename_and_moveout_apk(targetVariant) {
    // get hash of current commit
    new ByteArrayOutputStream().withStream { os -> 
        def result = exec {
            executable = 'git'
            args = ['rev-parse', '--short', 'HEAD']
            standardOutput = os
        }
        
        project.ext.gitHash = os.toString().trim();
    }

    // replace output apk name to <product>-<version>-<buildtype>-<githash>.apk
    def versionSuffix = targetVariant.buildType.versionNameSuffix ? targetVariant.buildType.versionNameSuffix : ""
    def versionName = targetVariant.mergedFlavor.versionName + versionSuffix + "-${gitHash}";
    
    if (targetVariant.zipAlign) {
        def originZipAlignedApkFile = targetVariant.outputFile;
        def renameZipAlignedApkFile = originZipAlignedApkFile.name.replace(targetVariant.buildType.name, versionName);
        copy {
            from "$originZipAlignedApkFile"
            into "$rootProject.projectDir/out"
            rename ("$originZipAlignedApkFile.name", "$renameZipAlignedApkFile")
        }
    }

    def originApkFile = targetVariant.packageApplication.outputFile;
    def renameApkFile = originApkFile.name.replace(targetVariant.buildType.name, versionName);
    copy {
        from "$originApkFile"
        into "$rootProject.projectDir/out"
        rename ("$originApkFile.name", "$renameApkFile")
    }
}

clean.doLast {
    project.delete "$rootProject.projectDir/out"
}