svn 规范apk的生成命名
第一步:新建SVNVersion.gradle 放置于build.gradle统计目录下面
/*task svnversion {
description 'Get SVN revision number.'
new ByteArrayOutputStream().withStream { os ->
exec {
executable = 'svnversion'
standardOutput = os
}
ext.revid = os.toString()
}
}*/
def svnversion() {
description 'Get SVN revision number.'
new ByteArrayOutputStream().withStream { os ->
/* exec {
executable = 'svnversion'
standardOutput = os
}
ext.revid = os.toString()*/
def result = exec {
executable = 'svn'
args = ['info']
standardOutput = os
}
def outputAsString = os.toString()
def matchLastChangedRev = outputAsString =~ /Last Changed Rev: (\d+)/
// 因为要兼容之前的版本,所以codeVersion不能比之前的小
ext.svnRev = 10000 + "${matchLastChangedRev[0][1]}".toInteger()
}
return svnRev
}
/*
task printsvn(description: 'Demonstrate calling svnversion task.') << {
println 'Current SVN Version: ' + svnversion()+""
}
*/
import java.util.regex.Pattern
task('increaseVersionCode') << {
description 'Get SVN revision number1.'
// def manifestFile = file("src/main/AndroidManifest.xml")
def manifestFile = file("build.gradle")
// def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
def pattern = Pattern.compile("versionCode (\\d+)")
def manifestText = manifestFile.getText()
def matcher = pattern.matcher(manifestText)
matcher.find()
// def versionCode = Integer.parseInt(matcher.group(1))
// logger.debug("versionCode: ", versionCode);
def manifestContent = matcher.replaceAll("versionCode " + svnversion())
description 'Get SVN revision number2.'
manifestFile.write(manifestContent)
}
task('incrementVersionName') << {
// description 'Get SVN revision number3.'
// def manifestFile = file("src/main/AndroidManifest.xml")
// def patternVersionNumber = Pattern.compile("versionName=\"(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\"")
// def manifestText = manifestFile.getText()
// def matcherVersionNumber = patternVersionNumber.matcher(manifestText)
// matcherVersionNumber.find()
// def majorVersion = Integer.parseInt(matcherVersionNumber.group(1))
// def minorVersion = Integer.parseInt(matcherVersionNumber.group(2))
// def pointVersion = Integer.parseInt(matcherVersionNumber.group(3))
//// def buildVersion = Integer.parseInt(matcherVersionNumber.group(4))
// def mNextVersionName = majorVersion + "." + minorVersion + "." + pointVersion + "." + svnversion()
// def manifestContent = matcherVersionNumber.replaceAll("versionName=\"" + mNextVersionName + "\"")
// manifestFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
// if (task.name == 'generateReleaseBuildConfig' || task.name == 'generateDebugBuildConfig') {
task.dependsOn 'increaseVersionCode'
task.dependsOn 'incrementVersionName'
// }
}
第二步:在build.gradle中加入以下代码:
buildTypes {
release {
signingConfig signingConfigs.release
zipAlignEnabled true
minifyEnabled true
//混淆文件直接放在: proguard-rules.pro 里面即可
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为wandoujia_v1.0.0.1320_20150115.apk
def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}.${defaultConfig.versionCode}_${releaseTime()}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationIdSuffix '.bata'
versionNameSuffix '.d'
debuggable true
}
}
svn 规范apk的生成命名的更多相关文章
- apk签名文件生成
一.生成签名文件 命令: keytool -genkey -v -keystore 签名文件名称.keystore -alias 签名文件别名 -keyalg RSA -keysize 2048 -v ...
- Android开发--apk的生成
0.前言 此方法为eclipse中生成apk的方法!!!! 1.生成ketstore 在命令提示符中找到java的jdk路径,例如: D:\study software\Java\jdk1.8.0_2 ...
- 从" ThinkPHP 开发规范 "看 PHP 的命名规范和开发建议
稍稍水一篇博客,摘抄自Think PHP 的开发规范,很有引导性,我们可以将这些规范实践到原生 PHP 中. 命名规范 使用ThinkPHP开发的过程中应该尽量遵循下列命名规范: 类文件都是以.cla ...
- CSS书写规范、顺序和命名规则
写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里总结一个CSS书写规范.CSS书写顺序供大家参考 这些是参考了国外一些文章以及我的个 ...
- css命名规范: BEM 的命名法
整理自:前端早读课[第1183期]这些 CSS 命名规范,将省下你大把调试时间 试图解决 3 类问题: 仅从名字就能知道一个 CSS 选择器具体做什么 从名字能大致清楚一个选择器可以在哪里使用 从 C ...
- 网页制作中规范使用DIV+CSS命名规则,可以改善优化功效特别是团队合作时候可以提供合作制作效率,具体DIV CSS命名规则CSS命名大全内容如下:
页头:header 如:#header{属性:属性值;}或.header{属性:属性值;},也许你需要了解class与id区别及用法登录条:loginBar 标志:logo ...
- 打包成apk,生成apk文件,上传到网站服务器提供链接下载
Android开发把项目打包成apk: 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android ...
- Java编码规范之数据对象命名
数据对象分多种,为方便阅读并区分各数据对象的用途,习惯将数据对象分为以下几类,供参考: 持久对象 PO(persistant object)对象关系映射(ORM)概念的产物,基本上对象的成员变量对应了 ...
- 项目工程化之git提交规范以及 CHANGELOG生成
事先声明,本文是参考了其他大神的博客之后自己尝试的记录,具体可以参考如下 链接 先说说git 提交规范把,这里基本都是这个工具 cz-customizable 1,安装 npm install cz- ...
随机推荐
- SecurityException:Not allowed to start service Intent ,without permission not exported from
本来是学长以前的项目,我正在重做一遍.结果突然出现了异常,我很是不解啊,怎么莫名其妙的就出现异常了呢?我昨天用还是好好的,根本就没动过源代码.于是在网上开始了一遍又一遍的查询,有的说要加权限.有的说这 ...
- onConfigurationChanged与OnCreate,究竟谁被调用的问题
在以前的版本中只要在AndroidManifest.xml文件中对activity指定android:configChanges="keyboardHidden|orientation&qu ...
- css3中matrix函数的使用
scale(sx,sy)对应matrix(sx,0,0,sy,0,0) 拉伸 rotate(θ)对应matrix(cosθ,sinθ,-sinθ,cosθ,0,0) 旋转 skew(θx,θy)对 ...
- 暑假集训(2)第二弹 ----- The Suspects(POJ1611)
B - The Suspects Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:20000KB ...
- ZeroBrane Lua脚本编辑器代码自动补全
简介 ZeroBrane Studio是一款支持代码提示.语法高亮.远程调试.代码分析.调试等功能的轻量级Lua IDE工具.可以去官网studio.zerobrane.com进行下载 ...
- (转) IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...
- Scala - 处理时间(nscala-time - Joda Time的scala封装)
GITHUB : https://github.com/nscala-time/nscala-time MAVEN : (注意选对scala版本) <dependency> <gro ...
- 解决Mysql的主从数据库没有同步的两种方法
今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常.show master status; ...
- Unix环境高级编程学习笔记——dup
dup 和 dup2 dup和dup2,都是用来将一个文件描述符复制给另一个文件描述符上,这两个文件描述符都指向同一个文件状态标志上. 只是文件描述符的大小不一样,dup所执行下的复制,肯定是返回 ...
- 原生js的兼容问题总结
获取元素的非行间样式 function getStyle(obj, name) { //获取元素的非行间样式 if (obj.currentStyle) { return obj.currentSty ...