原文地址
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()
}