Flutter默认Demo可运行Web,无法在模拟器及真机启动,求解决方案
Flutter 移动端编译失败问题
我正在Udemy平台的《Flutter & Dart 开发iOS和Android应用》课程学习,已完成大部分配置。默认Demo代码可编译并正常运行Web端(
),但在VS Code和Android Studio中均无法在模拟器及真机上启动。
编译错误日志
Exception in thread "main" java.net.SocketException: A connection attempt failed because the connected party did not properly respond after some time, or established connection failed because the connected host has failed to respond at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:325) at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:484) at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:478) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:160) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:111) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1510) at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1425) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455) at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:580) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187) at java.base/sun.net.www.protocol.http.HttpURLConnection.followRedirect0(HttpURLConnection.java:2902) at java.base/sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2811) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1927) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224) at org.gradle.wrapper.Download.downloadInternal(Download.java:58) at org.gradle.wrapper.Download.download(Download.java:44) at org.gradle.wrapper.Install$1.call(Install.java:61) at org.gradle.wrapper.Install$1.call(Install.java:48) at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65) at org.gradle.wrapper.Install.createDist(Install.java:48) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) Exception: Gradle task assembleDebug failed with exit code 1 Exited (sigterm)
已尝试的解决方法
- 安装JDK
- 参考Stack Overflow相关解决方案
- 执行
flutter --v、flutter clean、flutter run命令
项目代码(main.dart)
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter - The Complete Guide', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ const Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headlineMedium, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: const Icon(Icons.add), ), ); } }
解决方案
从错误日志看,核心问题是Gradle下载依赖时网络连接超时,以下是针对性解决方法:
1. 配置Gradle国内镜像
修改项目根目录android/build.gradle中的repositories部分,替换为国内镜像:
buildscript { ext.kotlin_version = '1.7.10' repositories { maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'https://maven.aliyun.com/nexus/content/groups/public' } } dependencies { classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'https://maven.aliyun.com/nexus/content/groups/public' } } }
2. 手动下载Gradle并配置
- 查看
android/gradle/wrapper/gradle-wrapper.properties中的Gradle版本(如distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip) - 手动下载对应版本的Gradle压缩包
- 解压到本地路径(如
C:\gradle\gradle-7.5或~/gradle/gradle-7.5) - 修改
gradle-wrapper.properties中的distributionUrl为本地路径:
注意Windows路径需用distributionUrl=file\:///C:/gradle/gradle-7.5-all.zip\转义,Mac/Linux直接用/
3. 检查网络代理设置
- 关闭全局代理或VPN,确保Gradle能正常访问网络
- 若需代理,在项目根目录创建
gradle.properties文件,添加代理配置:systemProp.http.proxyHost=你的代理IP systemProp.http.proxyPort=代理端口 systemProp.https.proxyHost=你的代理IP systemProp.https.proxyPort=代理端口
4. 清除Gradle缓存并重建
执行以下命令:
flutter clean cd android ./gradlew clean ./gradlew build --refresh-dependencies cd .. flutter run
5. 检查JDK版本
确保使用Flutter推荐的JDK版本(如OpenJDK 11),避免版本不兼容问题。
内容的提问来源于stack exchange,提问作者Chinez
相关产品推荐
相关产品推荐

