升级Gradle后构建APK失败::app:packageDebug任务报错
解决Gradle升级后
:app:packageDebug路径重复构建错误 你遇到的核心问题是输出路径被重复拼接——错误信息里的E:\workspace...\debug\E:\workspace...\app-debug.ap明显是把完整路径又嵌套成了子目录,这是因为你在配置APK输出文件名时用错了File构造逻辑导致的。
问题根源
在你的applicationVariants.all代码块中,这段代码是错误的:
if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = "agente-" + variant.buildType.name + ".apk" output.outputFileName = new File(outputFile, fileName) }
outputFile本身已经是包含完整路径的File对象(比如E:\workspace...\debug\app-debug.ap),用new File(outputFile, fileName)会把outputFile当作父目录,最终生成的路径就变成了父目录\完整路径\文件名,也就是你看到的重复路径。
正确修改方案
替换掉原来的applicationVariants.all代码块,直接设置文件名(Gradle会自动使用默认输出目录),或者正确指定父目录:
applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 直接设置文件名,Gradle自动放在默认输出目录下 def fileName = "agente-${variant.buildType.name}-${variant.versionName}.apk" output.outputFileName = fileName // 若需自定义输出目录,可这样写(避免路径重复): // def customDir = new File(outputFile.parent, "custom_apks") // output.outputFileName = new File(customDir, fileName).absolutePath } } }
为什么这样有效?
- 从Gradle 3.0+开始,
output.outputFileName支持直接设置为字符串文件名,Gradle会自动将其放在默认输出目录(app/build/outputs/apk/[buildType]/),无需手动拼接完整路径。 - 如果要自定义输出目录,需用
outputFile.parent作为基准父目录,避免嵌套完整路径。
额外排查建议
- 清理构建缓存:执行
File > Invalidate Caches... > Invalidate and Restart,删除app/build和本地.gradle/caches目录后重新构建。 - 匹配Gradle版本兼容性:你的项目使用
compileSdkVersion 26,建议搭配Gradle插件版本3.0.1(对应Gradle 4.1),而非最新版本——新版本插件对旧compileSdk的支持可能存在适配问题,可在项目根目录build.gradle中修改:dependencies { classpath 'com.android.tools.build:gradle:3.0.1' } - 简化签名配置:你的
debug和config两个signingConfig内容完全一致,可合并为一个,减少配置复杂度。
按上述修改后,应该能正常生成APK了。
内容的提问来源于stack exchange,提问作者Henrique
相关产品推荐
相关产品推荐

