Gradle配置教程之自定义APK名称与输出路径
作者:蜗牛学开车 时间:2023-03-04 17:35:27
前言
接触Android Stuidio有一阵子了,之前用的时候有很多小问题,不过现在的版本感觉已经很好用了,所以准备彻底从Eclipse转战Android Stuidio,这段时间把以前经常使用的公用库都从Eclipse移植过来了,今天研究了一下在Android Studio下进行打包签名之类的操作,其实主要是研究Gradle了,以前没有用过Gradle,但是早就耳闻Gradle是非常强大的构建系统,经过一天的奋战,现在整理记录下,以供大家参考和以后查阅。
需求
需求是这样的,我们的项目在上线的时候需要根据公司的明明规则重新对apk文件命名后才能发布到市场上。于是生成的每个apk文件都需要重新命名,如果渠道较少还好说,但是如果多的话就麻烦了。
其实方法很简单,只需要在你的app的Build.gradle文件中添加以下代码就可以了。
android {
……//省略部分代码
applicationVariants.all {
//判断是release还是debug版本
def buildType = it.buildType.name
def fileName
//下面的channel是获取渠道号,你获取渠道号不一定会和我的代码一样,因为有可能你的渠道名称的规则和我的不一样,我的规则是${渠道名}-${applicationId},所以我是这样取的。
def channel = it.productFlavors[0].name.split("-")[0]
//获取当前时间的"YYYY-MM-dd"格式。
def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
//只对Release包起作用,如果不是Release包则不变更输出路径,否则可能导致AS无法自动安装debug包。
if (buildType == "release") {
it.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apks/${it.productFlavors[0].applicationId}/${createTime}")
}
it.outputs.each {
//只对Release包起作用,如果不是Release包则不变更名称。
if (buildType == "release") {
//我此处的命名规则是:渠道名_项目名_版本名_创建时间_构建类型.apk
fileName = "${channel}_项目名称_v${defaultConfig.versionName}_${createTime}-${buildType}.apk"
//将名字打印出来,以便及时查看是否满意。
println "文件名:-----------------${fileName}"
//重新对apk命名。(适用于Gradle4.0以下版本)
//it.outputFile = new File(it.outputFile.parent, fileName)
//重新对apk命名。(适用于Gradle4.0(含)以上版本)如果你Gradle版本是4.0以下版本则将上面的一行代码放开并注释下面的这一行。
it.outputFileName = fileName
}
}
}
……//省略部分代码
}
怎么样?上面的代码是不是很简单,只需要把代码拷贝到你的项目中然后响应的地方改成你的就OK了。代码相信大家都能看懂,都是Groovy代码,如果不懂可以去百度一下,教程一堆。
补充一点:
上面代码中一句println fileName可能有的同学不知道在哪里查看,这个需要到Gradle Console中去查看。不知道在哪里的看下面的图片:
如果你觉得文章内容对你有帮助请帮忙顶一下,你的支持是对我最大的鼓励。谢谢!!!
来源:https://www.jianshu.com/p/b341b50ac2ef
标签:gradle,自定义,apk名称
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java 反射机制实例详解
2023-11-28 03:49:47
C#使用DLLImport调用外部DLL的方法
2022-07-17 04:41:18
c#执行外部命令示例分享
2023-10-18 15:30:20
Java的异常体系以及File类构造方法详解
2021-09-05 20:06:41
![](https://img.aspxhome.com/file/2023/6/83576_0s.png)
opencv实现轮廓高斯滤波平滑
2023-07-23 02:05:56
![](https://img.aspxhome.com/file/2023/4/82534_0s.jpg)
IDEA 单元测试报错:Class not found:xxxx springboot的解决
2022-05-11 01:11:02
![](https://img.aspxhome.com/file/2023/3/69663_0s.png)
详解Java中的final关键字
2023-02-20 17:29:50
解决Spring使用@MapperScan问题
2021-11-01 23:55:13
![](https://img.aspxhome.com/file/2023/3/73103_0s.jpg)
Spring中统一异常处理示例详解
2022-08-01 07:09:24
Android onCreate( )方法详细介绍
2023-02-24 12:27:07
C#同步、异步远程下载文件实例
2023-08-26 21:08:49
Android使用ShareSDK实现应用分享的功能
2023-10-02 06:37:42
![](https://img.aspxhome.com/file/2023/9/137299_0s.gif)
C#图表算法之无向图
2021-08-08 22:50:20
![](https://img.aspxhome.com/file/2023/4/113854_0s.jpg)
Flink支持哪些数据类型?
2023-01-15 06:55:43
Elasticsearch查询及聚合类DSL语句宝典示例详解
2023-01-10 18:51:46
C#使用Log4.net记录日志文件
2022-12-05 04:01:47
![](https://img.aspxhome.com/file/2023/7/106447_0s.png)
Spring之IOC详解
2022-10-13 19:10:24
![](https://img.aspxhome.com/file/2023/8/62118_0s.png)
Java设计模式之享元模式实例详解
2021-12-19 17:54:00
Java中StringUtils工具类进行String为空的判断解析
2022-10-16 06:56:53
Java流程控制语句之If选择结构
2023-11-11 04:02:29
![](https://img.aspxhome.com/file/2023/3/58853_0s.png)