升级至SDK 34后Android Gradle构建失败求助
解决Android升级targetSdk到34后GitHub流水线构建失败的问题
核心问题分析
本地构建正常但流水线失败,本质原因是:
- 本地存在依赖缓存,流水线为全新环境,依赖解析完全依赖远程仓库
- 旧仓库(如Jcenter)已停止服务,部分依赖坐标错误,Jitpack存在访问权限限制
具体解决步骤
1. 修复仓库配置,替换废弃仓库
修改根目录build.gradle的仓库配置,移除/替换已废弃的Jcenter,补充必要的活跃仓库:
buildscript { repositories { // 替换jcenter为mavenCentral(主流活跃仓库) mavenCentral() google() } dependencies { classpath 'com.android.tools.build:gradle:8.5.2' classpath 'com.google.gms:google-services:4.3.14' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.2' } } allprojects { repositories { // 保留jcenter仅用于未迁移的旧库(可选,建议逐步移除) jcenter() { content { includeGroup "com.amulyakhare" // 仅允许特定组从jcenter拉取 } } mavenCentral() // 添加mavenCentral,多数旧库已迁移至此 google() // 替代原maven.google.com写法,配置更简洁 maven { url "https://jitpack.io" } } }
2. 修正错误的依赖坐标
部分依赖存在冗余前缀,修改app/build.gradle中的依赖项:
- 原错误坐标:
com.amulyakhare:com.amulyakhare.textdrawable:1.0.1 - 修正为:
com.amulyakhare:textdrawable:1.0.1
3. 解决Jitpack 401未授权问题
针对io.github.zncmn.libyuv:core:0.0.7的401错误,提供两种方案:
- 方案一:添加Jitpack访问令牌
- 在GitHub仓库的
Settings > Secrets and variables > Actions中添加JITPACK_TOKEN(值为你的GitHub个人访问令牌,需包含仓库读取权限) - 修改根目录
build.gradle的Jitpack仓库配置:maven { url "https://jitpack.io" credentials { username = System.getenv("JITPACK_TOKEN") } } - 在GitHub流水线的yml文件中传入该变量:
steps: - name: Build with Gradle env: JITPACK_TOKEN: ${{ secrets.JITPACK_TOKEN }} run: ./gradlew bundleRelease
- 在GitHub仓库的
- 方案二:本地引入依赖
若该库无公开访问权限,下载其aar文件放入项目libs目录,在app/build.gradle中添加:dependencies { implementation files('libs/libyuv-core-0.0.7.aar') }
4. 处理其他找不到的依赖
- com.github.gcacace:signature-pad:1.2.1:若Jitpack无法访问,可将该库fork到自己的GitHub仓库后重新通过Jitpack引入,或下载aar本地依赖
- com.mikhaellopez:circularimageview:3.2.0:该库已发布到mavenCentral,确保仓库配置中包含
mavenCentral()即可正常拉取
5. 配置GitHub流水线的Gradle缓存
在流水线yml中添加Gradle缓存,减少重复构建时间并降低依赖拉取失败概率:
steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: gradle - name: Build with Gradle env: JITPACK_TOKEN: ${{ secrets.JITPACK_TOKEN }} run: ./gradlew bundleRelease
内容的提问来源于stack exchange,提问作者Anael
相关产品推荐
相关产品推荐

