【Android】使用Gradle打包时,获取svn的版本号,删除unalign.apk文件,得到版本号,并设定在打包的文件名称中

Gradle打包的文件名添加svn版本信息

为了获取SVN版本号,咱们要引入一个第三方的库,这个库能够获取svn的信息。javascript

一、首先在projece 的build.gralde中的dependencies中添加svnkit这个依赖:

dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.11'
    }

二、利用这个库来在编译的时候获取svn的信息的。

2.一、首先在module的build.gradle最上方添加java

import org.tmatesoft.svn.core.wc.* apply plugin: 'com.android.application'

这样就把svnkit这个库引入过来了。android

2.二、再添加一个获取svn版本号的方法,相似一获取时间的方法。web

def getSvnRevision() {
      ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
      SVNClientManager clientManager = SVNClientManager.newInstance(options);
      SVNStatusClient statusClient = clientManager.getStatusClient();
      SVNStatus status = statusClient.doStatus(projectDir, false);
      SVNRevision revision = status.getCommittedRevision();
      return revision.getNumber();
    }

2.三、使用svn版本号参与文件命名app

//重命名打包文件
    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def apk = output.outputFile;
            def releaseTime = releaseTime();
            def channelName = variant.productFlavors[0].name;
            def versionName = getVersionNameFromManifest();
            def newName = channelName + "_" + versionName + "_" + releaseTime + "_" + getSvnRevision();

            output.outputFile = new File(apk.parent, newName + ".apk");
        }
    }

三、删除打包产生的unalign.apk文件

//删除 unligned 文件
    android.applicationVariants.all { variant ->
        variant.assemble.doLast {
            variant.outputs.each { output ->
                println "aligned " + output.outputFile
                println "unaligned " + output.packageApplication.outputFile

                File unaligned = output.packageApplication.outputFile;
                File aligned = output.outputFile
                if (!unaligned.getName().equalsIgnoreCase(aligned.getName())) {
                    println "deleting " + unaligned.getName()
                    unaligned.delete()
                }
            }
        }
    }

四、得到配置文件中的版本号

//从androidManifest.xml中获取版本号
def getVersionNameFromManifest() {
    def manifestParser = new com.android.builder.core.DefaultManifestParser()
    return manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)
}

五、打包时间

//打包时间
def releaseTime() {
    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}