Flutter应用首次安装正常,重装时报java.net.BindException地址占用错误
问题成因
从报错栈可以看出错误出现在Gradle的FileLockCommunicator初始化阶段,核心原因是Gradle守护进程用于监听文件锁冲突的UDP端口被占用,具体触发场景包括:
- 上一次运行Flutter项目时Gradle守护进程异常退出,端口资源未被系统回收,重新打包时新启动的Gradle进程无法绑定同一端口
- 同时运行多个Flutter/Android项目,不同项目的Gradle进程争抢默认端口段
- 其他第三方软件占用了Gradle默认使用的端口范围
可行解决方案
- 方案1:终止残留Gradle进程
Windows系统执行命令:taskkill /F /IM java.exe(若需避免误杀其他Java进程,可先执行netstat -ano | findstr "UDP"找到对应端口的PID后单独终止)
macOS/Linux系统执行命令:pkill -f gradle - 方案2:重置Gradle缓存与守护进程
- 在项目android目录下执行
./gradlew --stop终止当前项目的Gradle守护进程 - 删除项目根目录下的
.gradle文件夹,可选删除用户目录下.gradle/caches中的旧版本缓存 - 重新执行Flutter运行命令,Gradle会自动初始化新的守护进程并分配空闲端口
- 在项目android目录下执行
- 方案3:自定义Gradle端口范围(长期解决)
打开用户目录下的.gradle/gradle.properties文件(不存在则新建),添加如下配置,指定Gradle使用的端口范围:
配置后所有Gradle进程都会从指定的空闲端口段分配资源,不会出现端口争抢问题。# 自定义文件锁监听端口范围 org.gradle.cache.locklistener.portRange=50000-55000 # 自定义守护进程端口范围 org.gradle.daemon.port=56000-60000 - 方案4:临时关闭Gradle守护进程(应急用)
运行Flutter项目时添加参数跳过守护进程:flutter run --no-gradle-daemon,该方案会降低每次打包的速度,仅适合临时应急使用。
内容的提问来源于stack exchange,提问作者Ikram Ghalib
相关产品推荐
相关产品推荐

