Jenkins编译Android项目提示系统找不到指定文件错误
使用Jenkins构建Android项目时,同项目在Android Studio中可正常构建运行,但执行如下Pipeline脚本时大部分编译流程正常,最终执行失败:
pipeline { agent any options { // 编译或测试失败时提前终止构建 skipStagesAfterUnstable() } stages { stage('Build') { steps { git url: 'git project', branch: 'dev', credentialsId: 'my id' } } stage('Compile') { steps { sh './gradlew app:compileDevelopmentDebugSources' } } } }
失败抛出的核心错误如下:
* What went wrong:
任务:app:processDevelopmentDebugResources执行失败:
无法解析配置
:app:developmentDebugRuntimeClasspath的所有文件,转换appcompat-1.3.1.aar (androidx.appcompat:appcompat:1.3.1)以匹配属性{artifactType=android-compiled-dependencies-resources, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}时失败。AarResourcesCompilerTransform执行失败,对应路径为C:\Windows\System32\config\systemprofile.gradle\caches\transforms-3\9e32ce413d257d430ee86cf55f3ee638\transformed\appcompat-1.3.1。
Android资源编译失败
ERROR:AAPT: C:\Windows\System32\config\systemprofile.gradle\caches\transforms-3\6f89bc5bb3a2c965d5a4f83c7a248dca\transformed\androidx.appcompat: error: The system cannot find the file specified. (2).
后续还多次出现core-1.8.0-rc01.aar (androidx.core:core:1.8.0-rc01)转换失败的相同错误,均触发AarResourcesCompilerTransform执行异常,AAPT提示系统找不到指定文件。
从错误日志中的Gradle缓存路径C:\Windows\System32\config\systemprofile\.gradle可以定位核心原因:
- Jenkins在Windows环境下默认以本地SYSTEM系统账号运行服务,该账号的用户主目录就是上述System32下的系统敏感路径。
- SYSTEM账号对该目录的访问存在UAC权限限制,同时Windows对System32目录下的进程文件访问有额外拦截规则,AAPT(Android资源编译工具)在处理AAR转换后的资源文件时,无法正常读取对应路径下的文件,最终报「找不到指定文件」错误。
- Android Studio默认以当前登录的普通用户身份运行,Gradle缓存存放在普通用户目录(如
C:\Users\你的用户名\.gradle)下,无权限/路径访问限制,因此可以正常构建。
- 修改Jenkins服务运行身份:按下
Win+R输入services.msc打开服务管理器,找到Jenkins服务右键选择「属性」,切换到「登录」标签页,不要选择「本地系统账户」,改为你日常运行Android Studio的本地普通用户账号,输入该账号的登录密码后点击确定,重启Jenkins服务。 - 清理损坏的历史缓存:直接删除
C:\Windows\System32\config\systemprofile\.gradle整个目录,避免之前生成的损坏缓存文件影响后续构建。 - (可选优化)配置全局
GRADLE_USER_HOME环境变量,将Gradle缓存目录修改到非系统盘的非敏感路径(例如D:\gradle_cache),从根源上避免系统目录权限、长路径限制导致的同类构建问题,配置完成后重启Jenkins服务生效。 - 重新触发Pipeline构建,验证AAR资源转换步骤可正常执行,不再抛出文件找不到的错误。
内容的提问来源于stack exchange,提问作者V.Rashkov

