美文网首页Android studioandroid进阶
【转】使用Gradle打包时,获取svn的版本号,删除unali

【转】使用Gradle打包时,获取svn的版本号,删除unali

作者: longzekai | 来源:发表于2017-12-04 18:29 被阅读15次

原文地址

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"))
}

两点说明:
1、获取正确的提交版本号步骤应该是:
a、将所有修改代码提交到svn。
b、在完成上一步操作之后进行一次update,这样你就可能获取到正确的svn Revision号了。
2、以上的实现方式如果嫌麻烦,可以采用这种方式:
def getSvnRevisionNumber() {
return 'svn info --show-item revision'.execute().text.trim()
}

相关文章

网友评论

    本文标题:【转】使用Gradle打包时,获取svn的版本号,删除unali

    本文链接:https://www.haomeiwen.com/subject/vfzxixtx.html