You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Firebase App Distribution插件后重命名APK无法被找到

问题解决:Firebase App Distribution 3.0.0+ 找不到重命名后的APK

问题背景

将Firebase App Distribution Gradle插件升级至3.0.0或更高版本后,执行./gradlew appDistributionUploadStagingDebug时出现**"Could not find an APK file for this variant for App Distribution"**错误。项目中存在自定义Gradle任务用于生成APK后重命名并移动文件,降级到2.2.0版本可正常运行,手动设置artifactPath也无法解决问题。

原因分析

3.0.0+版本的Firebase App Distribution插件调整了APK文件的查找逻辑,不再自动追踪跨目录的outputFileName路径。直接将outputFileName设置为上级目录的文件,会导致插件无法定位到生成的APK;同时手动配置artifactPath时,若未使用正确的绝对路径处理方式,也会引发路径解析失败。

解决方案

方案1:保留默认APK路径,通过复制任务实现文件移动

修改重命名逻辑,先让APK生成在默认目录,再通过Gradle的copy任务将文件复制到目标位置,确保Firebase插件能读取默认路径下的APK:

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        // 保留默认生成路径,不修改outputFileName
        def originalApkFile = output.outputFile
        project.logger.info("默认APK路径: ${originalApkFile}")
        
        // 定义目标文件信息
        def targetFileName = "newApkName.apk"
        def targetDir = project.rootDir.parent // 对应../../路径
        def targetApkFile = new File(targetDir, targetFileName)
        
        // 创建复制任务,依赖APK生成任务
        def copyApkTask = tasks.create(name: "copy${variant.name.capitalize()}Apk", type: Copy) {
            from originalApkFile
            into targetDir
            rename { targetFileName }
            dependsOn variant.assembleProvider
        }
        
        // 让Firebase上传任务等待复制完成
        tasks.named("appDistributionUpload${variant.name.capitalize()}").configure {
            dependsOn copyApkTask
        }
    }
}

方案2:正确配置artifactPath为绝对路径

如果坚持直接修改APK输出路径,需确保artifactPath使用绝对路径,并通过project.file()方法正确解析:

// 全局Firebase配置
firebaseAppDistribution {
    artifactType = "APK"
    testers = "testers"
    serviceCredentialsFile = project.file("firebase-app-distribution.json")
    // 直接指定绝对路径
    artifactPath = project.file("../../newApkName.apk").absolutePath
}

或者针对每个变体动态设置:

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def fileName = "newApkName.apk"
        def targetFile = new File("../../", fileName)
        // 同时修改outputFile和outputFileName,确保路径正确
        output.outputFile = targetFile
        output.outputFileName = targetFile.name
        project.logger.info("APK目标路径: ${output.outputFile}")
    }
    
    // 给当前变体的上传任务配置artifactPath
    tasks.named("appDistributionUpload${variant.name.capitalize()}").configure {
        it.artifactPath = variant.outputs.first().outputFile.absolutePath
    }
}

验证

修改配置后重新执行./gradlew appDistributionUploadStagingDebug,检查插件是否能正确定位到APK文件。

内容的提问来源于stack exchange,提问作者rcorchero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:24:13