Android Gradle中文件存在性检测异常:始终进入else分支
排查并解决Android Gradle中文件存在检测始终返回false的问题
核心调试步骤
先确认代码实际查找的路径:添加绝对路径打印,明确代码指向的位置,这是定位问题的关键:
println "Target file path: " + file.absolutePath对比打印出的路径和你实际存放AAR的路径,就能快速发现是路径拼接错误还是层级计算错误。
验证变量插值有效性:确保
version和project.name已正确赋值,比如version是否为null、是否和预期版本号一致,project.name是否对应模块名称:println "Current version: $version" println "Project name: ${project.name}"
常见错误点及修复方案
1. 相对路径基准目录错误
Gradle中直接使用new File("相对路径")时,相对路径的基准是Gradle工作目录(通常是项目根目录),如果脚本写在模块的build.gradle中,手动写../../../../很容易算错层级。
修复方式:基于项目根目录构建路径,避免层级计算失误:
def targetDir = new File(project.rootDir, "releases/${version}") def aarFileName = "${project.name}-${version}-${outputFile.name.contains('debug') ? 'debug' : 'release'}.aar" File file = new File(targetDir, aarFileName)
2. 手动拼接路径的兼容性问题
手动拼接路径可能遇到Windows/Linux路径分隔符不一致的问题,建议用Gradle原生文件API构建:
// 用project.file方法基于当前项目根目录解析路径 File file = project.file("releases/${version}/${aarFileName}")
3. 文件名大小写不匹配
Linux/macOS环境下文件名区分大小写,需确保代码生成的文件名和实际文件名完全一致(比如Debug和debug会被视为不同文件)。
完整修正后的代码示例
// 确保version变量已正确赋值,比如从project.version或自定义ext变量获取 def version = project.version def isDebug = outputFile.name.contains("debug") def aarFileName = "${project.name}-${version}-${isDebug ? 'debug' : 'release'}.aar" // 基于项目根目录构建目标文件路径 File file = new File(project.rootDir, "releases/${version}/${aarFileName}") // 调试用:打印绝对路径 println "Checking existence of: ${file.absolutePath}" if (file.exists()) { println("file found") throw new GradleException("Aar already exists in folder $version. Change name of folder if you want the same version") } else { println("file not found") outputFileName = file }
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

