当前位置: 首页 > news >正文

AndroidStuidio 指定APK 文件的输出路径和文件名格式

AndroidStuidio 指定APK 文件的输出路径和文件名格式

步骤总结
1、编辑build.gradle(Module :app)文件;
2、在 android {……} 结构体·中添加如上方法1、方法2的函数方法;

方法一:使用使用 java.nio.file.Files.copy 方法来完成文件复制操作。

缺点:outputDir (输出文件路径)必须跟完整绝对路径!
💡原因:调试发现 def outputDir = new File("E:/SVN/ASProjects/Release")实际指向了{Gradle_Location}/Release

😝优化:需要跟相对路径,使用 def outputDir = new File(project.rootDir, "../Release")格式

android {
...

// 指定 APK 输出路径和文件名格式
    applicationVariants.all { variant ->
        variant.outputs.all {
            def appName = "TouchAssistant"
            def versionName = variant.versionName
            def buildType = variant.buildType.name
            def outputDir = new File(project.rootDir, "../Release")
            println "目标输出目录: ${outputDir.absolutePath}"

            // 创建输出目录
            if (!outputDir.exists()) {
                if (outputDir.mkdirs()) {
                    println "成功创建输出目录: ${outputDir.absolutePath}"
                } else {
                    println "无法创建输出目录: ${outputDir.absolutePath}"
                }
            }

            def outputFileName = "${appName}-${versionName}-${buildType}.apk"
            // 设置输出文件名
            setOutputFileName(outputFileName)
            // 获取原输出文件
            def originalOutputDir = outputFile.parentFile
            // 计算新的输出文件
            def newOutputFile = new File(outputDir, outputFileName)

            // 如果新的输出目录不存在,则创建它
            if (!newOutputFile.parentFile.exists()) {
                if (newOutputFile.parentFile.mkdirs()) {
                    println "成功创建新输出文件的父目录: ${newOutputFile.parentFile.absolutePath}"
                } else {
                    println "无法创建新输出文件的父目录: ${newOutputFile.parentFile.absolutePath}"
                }
            }

            // 在构建完成后将 APK 复制到新位置
            variant.assemble.doLast {
                try {
                    java.nio.file.Files.copy(
                            outputFile.toPath(),
                            newOutputFile.toPath(),
                            java.nio.file.StandardCopyOption.REPLACE_EXISTING)
                    println "成功复制 APK: ${outputFile.absolutePath} -> ${newOutputFile.absolutePath}"
                } catch (java.io.IOException e) {
                    println "复制 APK 失败: ${outputFile.absolutePath} -> ${newOutputFile.absolutePath}: ${e.message}"
                }
            }
        }
    }
}

方法二 :使用’newOutputFile.text = outputFile.text’复制文件

Error:使用该方法拷贝的文件内容可能不一致,不可用;
因为它是将文件内容作为文本处理,可能会在处理二进制文件(如 APK 文件)时改变文件的编码和格式,导致内容不一致。
我们可以使用 Java NIO 的 Files.copy 方法来进行二进制文件的复制,确保文件内容完整一致。

android {
      ......
            // 在构建完成后将 APK 复制到新位置
            variant.assemble.doLast {
                try {
                    newOutputFile.text = outputFile.text    //按txt文本复制,存在编码或格式错误问题
                } catch (java.io.IOException e) {
                    println "复制 APK 失败: ${outputFile.absolutePath} -> ${newOutputFile.absolutePath}: ${e.message}"
                }
            }
        }

相关文章:

  • 【YOLOv8】
  • Java-数据结构-(HashMap HashSet)
  • 深入探索ArkUI @Builder与@BuilderParam的进阶应用
  • React 低代码项目:网络请求与问卷基础实现
  • 《DeepSeek-V3:人工智能大语言模型》
  • Windows 环境下 Prometheus 安装指南
  • python爬虫系列课程1:初识爬虫
  • 【基础架构篇五】《DeepSeek计算图解析:动静态图融合设计原理》
  • 五档历史Level2行情数据:期货市场的信息宝库
  • spconv 安装测试
  • VScode运行C语言提示“#Include错误,无法打开源文件stdio.h”
  • [实现Rpc] 消息抽象层的具体实现
  • 火锅店点餐系统的设计与实现(ssm论文源码调试讲解)
  • 百度api填写
  • 算法12--栈
  • 在Nodejs中使用kafka(四)消息批量发送,事务
  • 栈回溯基础
  • python学opencv|读取图像(七十四)人脸识别:EigenFaces算法
  • 一周学会Flask3 Python Web开发-request请求对象与url传参
  • TCP通讯-客户端链接
  • 科技部等七部门:优先支持取得关键核心技术突破的科技型企业上市融资
  • 北京今日白天超30℃晚间下冰雹,市民称“没见过这么大颗的”
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • 中美是否计划讨论美方以芬太尼为由对华征收的特别关税?外交部回应
  • 人民时评:莫让“假俗乱”讲解侵蚀“文博热”
  • 让胖东来“自闭”的玉石生意,究竟水有多深?