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

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

为了获取SVN版本号,我们要引入一个第三方的库,这个库可以获取svn的信息。

1、首先在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'
    }

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

2.1、首先在module的build.gradle最上方添加

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

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

2.2、再添加一个获取svn版本号的方法,类似一获取时间的方法。

    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.3、使用svn版本号参与文件命名

    //重命名打包文件
    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");
        }
    }

3、删除打包产生的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()
                }
            }
        }
    }

4、获得配置文件中的版本号

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

5、打包时间

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

你可能感兴趣的:(Gradle,Android,android,gradle)