美文网首页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