能否在Gradle中为Build APK(s)配置额外的APK生成路径?
Gradle配置APK额外输出到指定路径方案
可以实现,我们可以通过给构建任务追加后置复制操作,在不修改默认构建输出路径的前提下,额外生成一份APK到你指定的目标路径,配置步骤如下:
完整配置代码
直接替换你app模块build.gradle文件中现有的applicationVariants相关代码即可:
android { // 原有android域下的其他配置(defaultConfig、buildTypes等)全部保持不变 applicationVariants.all { variant -> variant.outputs.all { output -> // 你原有修改输出文件名的逻辑保持不变 def appVersionName = "company_name_${versionName}" switch (variant.buildType.name) { case "debug": outputFileName = "${appVersionName}_debug.apk" break case "release": outputFileName = "${appVersionName}_release.apk" break } } // 新增:构建完成后自动复制APK到目标路径 variant.assembleProvider.get().doLast { // 只需要debug版本额外复制保留该判断,需要全版本都复制直接删除判断即可 if (variant.buildType.name == "debug") { def sourceApk = variant.outputs.first().outputFile // 目标路径:对应你需要的app/debug_apk目录,可自行修改 def targetDir = rootProject.file("app/debug_apk") // 自动创建不存在的目标文件夹,无需手动新建 if (!targetDir.exists()) { targetDir.mkdirs() } // 执行复制操作 copy { from sourceApk into targetDir } } } } }
补充说明
- 该配置不会影响原有默认构建逻辑,
app/build/outputs/apk路径下的APK依然会正常生成,同时会额外复制一份到你指定的目标路径 - 如果你需要使用绝对路径,直接把
rootProject.file("app/debug_apk")替换为你的绝对路径即可,例如file("C:\\project\\app\\debug_apk") - 若使用Gradle 6.0及以下旧版本,把
variant.assembleProvider.get().doLast替换为variant.assemble.doLast即可 - 配置完成后同步Gradle,重新执行
assembleDebug任务即可生效
内容的提问来源于stack exchange,提问作者Eugene H
相关产品推荐
相关产品推荐

