android studio 打包自动生成版本号与日期,apk输入路径详解
时间:2022-07-27
本文章向大家介绍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.Gson
class 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 + 1
int lastIndexPoint = versionJsonObject.versionName.lastIndexOf(".")
String newStr = versionJsonObject.versionName.substring(0, lastIndexPoint)
println("newStr" + newStr)
versionJsonObject.versionName = newStr + "." + versionJsonObject.versionCode
println("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输入路径详解就是小编分享给大家的全部内容了,希望能给大家一个参考。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
- PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
- 实现php删除链表中重复的结点
- Yii2.0框架实现带分页的多条件搜索功能示例
- 定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
- PHP APP微信提现接口代码
- thinkPHP5.1框架路由::get、post请求简单用法示例
- Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
- Python爬虫实例——scrapy框架爬取拉勾网招聘信息
- php实现微信企业转账功能
- Laravel框架模型的创建及模型对数据操作示例
- Python环境管理virtualenv&virtualenvwrapper的配置详解
- Matplotlib自定义坐标轴刻度的实现示例
- Python基于time模块表示时间常用方法
- ITK 实现多张图像转成单个nii.gz或mha文件案例