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鸵荠、刪除打包產(chǎn)生的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蛹找、獲取正確的提交版本號步驟應(yīng)該是:
a、將所有修改代碼提交到svn哨坪。
b庸疾、在完成上一步操作之后進(jìn)行一次update,這樣你就可能獲取到正確的svn Revision號了当编。
2届慈、以上的實現(xiàn)方式如果嫌麻煩,可以采用這種方式:
def getSvnRevisionNumber() {
return 'svn info --show-item revision'.execute().text.trim()
}