android studio 打包自动生成版本号与日期,apk输入路径详解
一. 打开项目选择如图示1 (build.gradle 项目位置)
二. 1. build.gradle 文件添加内容如下。gradle是【com.android.tools.build:gradle:3.0.0 以下版本】
android{ defaultConfig {...} 自动追加版本号和版本名称 android.applicationVariants.all { variant->variant.outputs.each { output-> output.outputFile = new File(output.outputFile.parent,'app_device_v'+defaultConfig.versionName+'_'+new Date().format('yyyy-MM-dd')+'_'+buildType.name+'.apk') } }}
output.outputFile.parent 可以指定输出到指定文件夹
2. build.gradle 文件添加内容如下。 gradle是【com.android.tools.build:gradle:3.0.0及其以上版本】
android{ defaultConfig {...} //release版本输出包名自动追加版本号和版本名称 applicationVariants.all { variant -> variant.outputs.all {//只处理生产版本if (buildType.name == ’release’) { def createTime = new Date().format('YYYY-MM-dd', TimeZone.getTimeZone('GMT+08:00')) // app包名称 outputFileName = 'app_v' + defaultConfig.versionName + '_' + createTime + '_' + buildType.name + '.apk' ////指定release输出到指定文件夹 variant.getPackageApplication().outputDirectory = new File(config.appReleaseDir + '/${createTime}')} } }}
三. 打包查看结果:图示3(直接点击assembleRelease即可)
补充知识:Android编译gradle 动态修改版本号
在构建代码的时候不想每次都修改版本号,需能够增加一个功能在特定的条件下动态的修改版本号
在manifest里面加入占位符号
<manifest xmlns:android='http://schemas.android.com/apk/res/android' android:versionCode='${versioncode}' android:versionName='${versionname}'>
修改build.gradle
import com.google.gson.Gsonclass Version { int versionCode String versionName}def versionJsonFile = file(’./version.json’)//这个文件最好放一个所有项目人员都能够访问的地方 def versionJsonObject = new Gson().fromJson(versionJsonFile.text, Version.class) android.applicationVariants.all { variant -> println('variants name : ' + variant.name) //只有满足特定条件的情况下才会版本自增一,这个可以看看各个项目的特定配置 if (variant.name.toLowerCase().contains('ceshirelease') ) {println('variants name : versionCode ' + versionJsonObject.versionCode + 'versionname: ' + versionJsonObject.versionName)versionJsonObject.versionCode = versionJsonObject.versionCode + 1int lastIndexPoint = versionJsonObject.versionName.lastIndexOf('.')String newStr = versionJsonObject.versionName.substring(0, lastIndexPoint)println('newStr' + newStr)versionJsonObject.versionName = newStr + '.' + versionJsonObject.versionCodeprintln('versonJsonStr.versionName ' + versionJsonObject.versionName) } //这句是核心,可以调整版本号和版本明,修改了这个会影响到BuildConfig.class里面的属性 variant.mergedFlavor.versionCode = versionJsonObject.versionCode variant.mergedFlavor.versionName = versionJsonObject.versionName //如果没有加下面这句,当应用安装后会出现应用信息没有版本号的问题,这个必须有 variant.mergedFlavor.manifestPlaceholders.put('versioncode', versionJsonObject.versionCode) variant.mergedFlavor.manifestPlaceholders.put('versionname', versionJsonObject.versionName) } //为了记住最新的版本号,是需要进行文件的回写的,什么时候回写会好一点 //个人认为只有当打包apk的动作执行成功后 回写文件记录的版本号最优 afterEvaluate { project -> gradle.taskGraph.afterTask {task, taskState -> //这里如果assembleceshirelease 就具体的打包的变种项目,各个应用肯定不一样,需要调整下 if (task.name.toLowerCase().contains('assembleceshirelease') && taskState.getFailure() == null) { println('try assemble ceshi release' ) //回写文件操作 versionJsonFile.withPrintWriter { out ->out.println(new Gson().toJson(versionJsonObject)) } } } }
给apk重新命名也是同样的道理
variant.getOutputs().all {File file = it.outputFile;println(' file property file.canRead() ' + file.canRead() + ' file.canWrite ' + file.canWrite())String pathString = file.getPath();println(' path String : ' + pathString + ' File.pathSeparator: ' + File.separator) //指定最终输出的文件的目录和名字pathString = file.getParent() + File.separator + 'test.apk';println(' path pathString : ' + pathString)file.renameTo(pathString) }
以上这篇android studio 打包自动生成版本号与日期,apk输入路径详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持好吧啦网。