mo211683 发表于 2021-3-2 16:01

Android studio打包release的apk之后复制到指定目录

## 背景
今天有个同学,需要打包release之后,保留多次打包的apk文件。在远古时候版本,只要修改release文件夹下的文件,和默认不同名,就能达到保留效果。
由于目前as升级之后进行了‘优化’,这个功能已经修复了。
### 目的1
当我们打包release之后,进行apk文件重命名。更好的识别这个包的来源。
### 如何修改打包后的apk名字?
在之前我发布过文章,还有具体的代码。直接复制即可。
传送门:
(https://www.sunofbeach.net/a/1330784937586020352)
时间格式化那个方法,可以稍微调整下。
```java
def buildTimes() {
    return new Date().format("yyyyMMdd HH_mm")
}
```
格式化具体到分钟。
### 目的2
现在每次打包都会清空release文件夹。我们无法避免这个事情。我们可以在打包完成之后,把这个文件夹复制到其他地方保存。

```java
//项目根目录下build.gradle在末尾增加代码
subprojects() {
    //assembleRelease这个任务,就是我们普通的打包任务。打release包。
    def releaseTasks = project.getTasksByName("assembleRelease", false)
    copyApkFile(releaseTasks, project)
}

def copyApkFile(Set<Task> tasks, Project project) {
    def fromDir = "/build/outputs/apk/release"
    for (task in tasks) {
      def dir = project.getProjectDir().getAbsolutePath()
      println "assemble release dir = $dir"
      //我们目前存放打包后apk的目录
      def apkDir = dir + fromDir
      def file = new File(apkDir)
      
      if (file.exists()) {
            def isDelete = delete(apkDir)
            println "del: $isDelete"
      }
      //在task执行完成之后       
      task.doLast {
            if (file.exists()) {
                //将生成的apk整个目录复制到我们指定位置
                copy {
                  println "copy dir = ${file.getAbsolutePath()}"
                  from apkDir
                  into rootProject.getRootDir().getAbsolutePath() + "/apk/"
                }
            }
      }
    }
}

```
在上面,我们定制了assembleRelease任务的包的位置:项目目录下/apk/中。
![图片描述](https://imgs.sunofbeaches.com/group1/M00/00/3F/rBsADWATrMWASxH1AABMFumhsh0544.png)
我的命名方式,类型,版本名字,版本号,年月日,时分。
### 如何打包?
![图片描述](https://imgs.sunofbeaches.com/group1/M00/00/3F/rBsADWATrSeAawmRAAC9hUwlkFM766.png)
双击这个任务就可以了。

yoyoma211 发表于 2021-3-2 20:34

新手过来学习了,感谢分享{:1_893:}

lili2312280 发表于 2021-3-2 16:59

牛逼,必须学习学习

987fw 发表于 2021-3-2 17:14

小白学习了,

mo211683 发表于 2021-3-3 09:23

lili2312280 发表于 2021-3-2 16:59
牛逼,必须学习学习

感谢支持,后续会继续分享:lol

wahson 发表于 2022-4-27 11:15

我希望把多渠道打包的apk复制到同一个文件夹,比如E://release,怎么写呢
例如
app\build\outputs\apk\huawei\release
app\build\outputs\apk\xiaomi\release
里面的apk复制到E://release

lye123456 发表于 2022-8-10 11:43

谢谢分享
页: [1]
查看完整版本: Android studio打包release的apk之后复制到指定目录