当前项目 dart=3.9.0 , flutter=3.35.1,gradle = gradle-8.12-all.zip , plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("com.android.application") version "8.9.1" apply false id("org.jetbrains.kotlin.android") version "2.1.0" apply false } , java = 17 , 运行或者打包时卡在 [+2102 ms] > Configure project :gradle [ ] Evaluating project ':gradle' using build file '/Users/users/Documents/dev/flutter/packages/flutter_tools/gradle/build.gradle.kts'. [ ] Resolved plugin [id: 'org.gradle.java-gradle-plugin'] [ ] Resolved plugin [id: 'org.gradle.groovy'] [ ] Resolved plugin [id: 'org.gradle.kotlin.kotlin-dsl', version: '5.1.2'] [ ] Resolved plugin [id: 'org.jetbrains.kotlin.jvm', version: '1.9.20'] [+2896 ms] Downloading https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-compiler-embeddable/2.0.21/kotlin-compiler-embeddable-2.0.21.jar to /Users/users/.gradle/.tmp/gradle_download14555767914496969696bin
时间: 2025-08-15 13:05:04 浏览: 14
<think>我们正在解决Flutter项目在运行或打包时卡在下载特定Kotlin依赖(kotlin-compiler-embeddable-2.0.21.jar)的问题。根据用户提供的引用[1][2][3][4]以及我们之前的回答,我们可以采取以下步骤:
核心思路:由于下载卡住通常是由于网络问题(特别是访问Gradle官方仓库速度慢)导致,我们可以通过以下方法解决:
1. 使用国内镜像源替换Gradle仓库地址。
2. 手动下载依赖并放入本地Gradle缓存。
3. 检查Flutter项目配置,确保Kotlin版本兼容。
具体步骤:
步骤1:配置Gradle使用国内镜像(推荐)
修改项目根目录下`android/build.gradle`文件,将原有的仓库地址替换为阿里云镜像。
在`buildscript`和`allprojects`部分添加阿里云镜像:
```groovy
buildscript {
ext.kotlin_version = '1.7.10' // 确保这里的版本与插件要求一致(2.0.21对应Kotlin1.7?注意:Kotlin插件版本和Kotlin版本是两回事,但通常有对应关系)
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0' // 使用与Flutter兼容的Gradle插件版本
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
jcenter()
}
}
```
注意:这里我们同时修改了`buildscript`和`allprojects`的仓库地址,确保构建脚本本身和项目依赖都使用镜像。
步骤2:清除Gradle缓存并重新构建
在终端执行以下命令:
```bash
flutter clean
rm -rf $HOME/.gradle/caches # 注意:这会清除所有项目的Gradle缓存,如果只想清除当前项目,可以进入android目录执行./gradlew cleanBuildCache
cd android
./gradlew clean
```
然后重新运行`flutter run`或`flutter build`。
步骤3:手动下载依赖(如果镜像源无效)
如果步骤1后仍然卡住,我们可以手动下载该jar包并放入Gradle缓存。
1. 下载依赖:访问 https://plugins.gradle.org/m2/org/jetbrains/kotlin/kotlin-compiler-embeddable/2.0.21/kotlin-compiler-embeddable-2.0.21.jar (或者使用国内镜像地址,如阿里云:https://maven.aliyun.com/repository/public/org/jetbrains/kotlin/kotlin-compiler-embeddable/2.0.21/kotlin-compiler-embeddable-2.0.21.jar)下载该文件。
2. 找到Gradle缓存目录:通常位于`$HOME/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable/2.0.21/`。注意:不同Gradle版本缓存路径可能略有不同,但基本在`modules-2/files-2.1`下。
3. 将下载的jar文件放入缓存目录,并重命名为一个随机的文件名(因为Gradle缓存使用SHA1哈希值作为文件名)。但这里有一个更简单的方法:让Gradle自己生成正确的文件名。
我们可以使用以下方法:
- 先让Gradle尝试下载(即使卡住,我们也能在临时目录找到部分下载的文件)
- 或者,我们可以在缓存目录中创建一个空文件,然后使用Gradle的`--refresh-dependencies`参数强制刷新,这样Gradle会重新下载并覆盖,但此时网络问题可能依旧。
因此,我们采用另一种方式:计算正确的文件名。
根据Gradle缓存规则,文件的命名规则是:`artifactId-version.jar`的SHA1哈希值(加上一些其他信息)。但实际操作中,我们可以先让Gradle尝试下载,然后从临时目录复制。
在卡住时,Gradle会在`$HOME/.gradle/.tmp`目录下生成临时文件(如用户日志中提到的`/Users/users/.gradle/.tmp/gradle_download14555767914496969696bin`)。我们可以等一段时间(因为可能正在下载),如果下载完成,该文件会自动移动到缓存目录。如果卡住很久,我们可以手动停止,然后复制临时文件到缓存目录。
缓存目录中文件的完整路径应该类似:
`$HOME/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable/2.0.21/<一串哈希>/kotlin-compiler-embeddable-2.0.21.jar`
我们可以这样做:
- 在`$HOME/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable/2.0.21/`目录下,应该有一个或多个由随机字符串(哈希值)命名的目录。进入其中一个(如果没有,就创建一个,比如`d4b8d7e9c5a3f2b1e6f7a8c9b0d3e4f5`)。
- 将下载的jar文件放入这个目录,并重命名为`kotlin-compiler-embeddable-2.0.21.jar`。
注意:如果存在多个这样的目录,我们可以删除所有,然后新建一个,并放入文件。或者,我们可以查看其他类似依赖的存放方式。
步骤4:检查Kotlin版本
在用户的问题中,我们看到下载的是2.0.21版本。但是,Flutter 3.35.1默认使用的Kotlin版本是多少?我们可能需要检查并统一版本。
在`android/build.gradle`中,确保`ext.kotlin_version`设置为与Flutter插件兼容的版本。通常,Flutter项目要求Kotlin版本为1.6.21或1.7.0以上。但是,这里我们下载的是2.0.21,这可能是Kotlin编译器插件的版本,而不是Kotlin标准库的版本。注意区分:
- `org.jetbrains.kotlin:kotlin-stdlib`:版本号如1.7.10
- `org.jetbrains.kotlin:kotlin-gradle-plugin`:版本号与Kotlin版本号一致,如1.7.10
- `org.jetbrains.kotlin:kotlin-compiler-embeddable`:这个依赖的版本号通常与Kotlin版本号一致,但这里出现了2.0.21,这可能是Kotlin 2.0.21版本?但请注意,Kotlin的最新稳定版本是1.9.x,2.0可能是一个测试版?所以,我们需要检查是否有插件指定了过高版本的Kotlin。
查看项目中的插件是否要求Kotlin 2.0.21。在`android`目录下,检查每个模块的`build.gradle`文件,看是否有依赖指定了高版本Kotlin编译器。
如果不需要,我们可以尝试强制指定版本。在`android/build.gradle`中,我们可以尝试:
```groovy
buildscript {
ext.kotlin_version = '1.7.10' // 使用一个已知兼容的版本
// ...
}
```
然后,我们还需要检查第三方插件是否要求高版本Kotlin。如果某个插件要求Kotlin 2.0.21,那么我们需要升级插件或等待插件更新。
步骤5:使用离线模式
如果我们已经确保依赖在缓存中,可以使用离线模式运行:
```bash
flutter run --offline
```
或者打包时,在`android`目录下运行:
```bash
./gradlew assembleDebug --offline
```
但注意,离线模式要求所有依赖都已经在本地缓存。
步骤6:升级或降级Gradle版本
有时候,Gradle版本与插件不兼容也会导致下载问题。我们可以尝试:
1. 升级Gradle:修改`android/gradle/wrapper/gradle-wrapper.properties`中的`distributionUrl`,使用更高版本(如7.6.1)。
2. 降级Gradle:如果项目较旧,使用稍低版本(如7.0.2)。
选择与Flutter兼容的Gradle版本(Flutter 3.35.1通常兼容Gradle 7.5-7.6)。
步骤7:检查代理设置
如果使用代理,确保在`gradle.properties`中正确配置:
```properties
systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
```
如果不使用代理,确保没有这些设置,或者设置系统环境变量。
总结:
我们优先尝试步骤1(配置镜像)和步骤2(清除缓存),大多数情况下可以解决。如果不行,再尝试手动下载(步骤3)和检查版本(步骤4)。最后,考虑离线模式或调整Gradle版本。
根据引用[2],我们还可以考虑将依赖上传到本地Maven仓库,但这通常用于团队共享,个人开发中不常用。
如果以上步骤仍然无法解决,请提供更多信息,如`flutter doctor -v`的输出和完整的错误日志。
§§相关问题§§
1. 如何配置Flutter项目以使用阿里云镜像加速?
2. Flutter项目中如何手动管理Gradle依赖?
3. 如何解决Flutter插件中的Kotlin版本冲突?</think>### 解决 Flutter 3.35.1 卡在下载 kotlin-compiler-embeddable-2.0.21.jar 的问题
#### 问题分析
当 Flutter 项目卡在下载 `kotlin-compiler-embeddable-2.0.21.jar` 时,通常由以下原因导致:
1. **网络限制**:访问 plugins.gradle.org 速度慢或被限制
2. **Gradle 缓存问题**:本地缓存损坏或不完整
3. **版本冲突**:Kotlin 编译器版本与 Flutter 插件不兼容
4. **镜像源缺失**:未配置国内镜像源加速下载
---
### 解决方案(按优先级排序)
#### 1️⃣ 配置国内镜像源(推荐首选)
修改 `android/build.gradle` 文件,添加阿里云镜像:
```gradle
buildscript {
repositories {
// 添加阿里云镜像
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
jcenter()
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
jcenter()
}
}
```
保存后运行:
```bash
flutter clean
flutter pub get
```
#### 2️⃣ 手动下载并放置依赖
1. **下载文件**:
- 访问 [阿里云镜像仓库](https://maven.aliyun.com/mvn/search)
- 搜索路径:`org/jetbrains/kotlin/kotlin-compiler-embeddable/2.0.21/`
- 下载 `kotlin-compiler-embeddable-2.0.21.jar`
2. **放置到缓存目录**:
```bash
# macOS/Linux
cp 下载的路径/kotlin-compiler-embeddable-2.0.21.jar \
~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-compiler-embeddable/2.0.21/
# Windows
copy 下载路径\kotlin-compiler-embeddable-2.0.21.jar \
%USERPROFILE%\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-compiler-embeddable\2.0.21\
```
#### 3️⃣ 强制刷新 Gradle 缓存
```bash
# 清除 Flutter 缓存
flutter clean
# 清除 Gradle 缓存 (macOS/Linux)
rm -rf ~/.gradle/caches
# 清除 Gradle 缓存 (Windows)
rmdir /s /q %USERPROFILE%\.gradle\caches
# 重新获取依赖
flutter pub get
```
#### 4️⃣ 检查 Kotlin 版本兼容性
在 `android/build.gradle` 中指定兼容版本:
```gradle
buildscript {
ext.kotlin_version = '1.7.10' // 与 Flutter 3.35.1 兼容的版本
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
```
#### 5️⃣ 使用离线模式(仅限开发)
```bash
flutter run --offline
```
---
### 预防措施
1. **定期清理缓存**:
```bash
flutter clean
rm -rf ~/.gradle/caches # 每月执行一次
```
2. **固定依赖版本**:
在 `pubspec.yaml` 中明确 Kotlin 版本:
```yaml
environment:
sdk: ">=2.12.0 <3.0.0"
kotlin: ^1.7.10 # 明确指定版本
```
3. **检查插件兼容性**:
使用 `flutter doctor -v` 验证所有插件是否支持 Flutter 3.35.1
---
### 技术原理
当 Flutter 构建 Android 项目时:
1. Gradle 会解析 `.flutter-plugins` 文件中的插件路径[^2]
2. 下载插件所需的 Kotlin 编译器依赖
3. 若网络不稳定或镜像未配置,会卡在 plugins.gradle.org 的下载过程
通过配置国内镜像或手动放置依赖,可绕过国际仓库访问瓶颈,显著加速构建过程[^1][^2]。
阅读全文
相关推荐



















