Flutter gradle 卡住问题解决方法

本文详细解析了在Flutter项目中遇到的Gradle依赖问题,并提供了具体的解决方案,包括修改项目的build.gradle文件和Flutter SDK下的flutter.gradle文件,将依赖源更改为阿里云的链接,以解决在中国环境下常见的依赖解析失败问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flutter在Debug项目的时候,应该最常见的错误就是类似下面这样的错误了。

Launching lib/main.dart on Android SDK built for x86 in debug mode...
Initializing gradle...
Resolving dependencies...
* Error running Gradle:
ProcessException: Process "/Users/rabbit/develop/android/flutter_app/android/gradlew" exited abnormally:
Project evaluation failed including an error in afterEvaluate {}. Run with --stacktrace for details of the afterEvaluate {} error.

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/rabbit/develop/android/flutter_app/android/app/build.gradle' line: 25

* What went wrong:
A problem occurred evaluating project ':app'.
> Could not resolve all files for configuration 'classpath'.
   > Could not find lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2).
     Searched in the following locations:
         https://jcenter.bintray.com/com/android/tools/lint/lint-gradle-api/26.1.2/lint-gradle-api-26.1.2.jar

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s
  Command: /Users/rabbit/develop/android/flutter_app/android/gradlew app:properties

Finished with error: Please review your Gradle project setup in the android/ folder.

这个问题的产生的原因,还是中国特有的问题,解决方案是改位阿里的链接(1.0已经修复了这个问题,不用再重新设置了)。

第一步:修改掉项目下的android目录下的build.gradle文件,把google() 和 jcenter()这两行去掉。改为阿里的链接。

maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }

全部代码:

buildscript {
    repositories {
        //  google()
        //  jcenter()
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public'}
        }
        dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

allprojects {
    repositories {
        // google()
        // jcenter()
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

注意是有两个部分进行了修改,不要只修改一处。

第二步:修改Flutter SDK包下的flutter.gradle文件,这个目录要根据你的SDK存放的位置有所变化。比如我放在了D盘Flutter目录下,那路径就是这个。

D:\Flutter\flutter\packages\flutter_tools\gradle

打开文件进行修改,修改代码如下(其实也是换成阿里的路径就可以了)。

buildscript {
    repositories {
        //jcenter()
        // maven {
        //     url 'https://dl.google.com/dl/android/maven2'
        // }
        maven{
            url 'https://maven.aliyun.com/repository/jcenter'
        }
        maven{
            url 'http://maven.aliyun.com/nexus/content/groups/public'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

然后再重新Debug一下,就基本可以启动起来。

还有一种错误是说硬件没有启动GPU,需要下载安装一个程序,这个提示的很清楚,不做过多的介绍了。

转自:https://jspang.com/detailed?id=41

<think>我们正在处理用户关于Flutter集成shared_preferences后应用无法运行或卡住问题。 根据用户描述,问题出现在集成shared_preferences包之后,应用无法运行或卡住。我们需要分析可能的原因并提供解决方案。 可能的原因: 1. 包版本冲突:shared_preferences包可能与其他已安装的包存在版本冲突。 2. 插件未正确注册:在Android或iOS平台上,可能需要额外的配置步骤。 3. 主线程阻塞:shared_preferences的同步操作可能阻塞了主线程(尽管shared_preferences在Dart端是异步的,但平台通道调用可能会引起问题?实际上,shared_preferences的读写操作是异步的,但如果在main函数中立即使用,且没有正确处理异步,可能会导致启动时卡住)。 4. 其他配置问题:如AndroidX兼容性问题,因为shared_preferences要求使用AndroidX。 解决方案: 1. 检查包版本:在pubspec.yaml中,确保shared_preferences的版本与其他依赖兼容。可以尝试使用最新版本。 2. 执行flutter clean和重新获取包:有时候构建缓存可能导致问题。 3. 检查Android和iOS的配置: - Android:确保gradle.properties中启用了AndroidX(如下配置): android.useAndroidX=true android.enableJetifier=true - iOS:如果使用iOS,确保Podfile中的平台版本至少为9.0(shared_preferences的要求)。 4. 避免在main函数中同步等待shared_preferences:因为shared_preferences的读写是异步的,如果在main函数中直接使用await,可能会阻塞UI的初始化。建议使用FutureBuilder或其他异步处理方式。 参考用户提供的引用,其中引用[1]提到了安装Flutter和Dart插件,引用[2]提到了日志打印的问题(但当前问题不是日志打印,而是卡住),引用[3]提供了一些资源链接,但可能不直接相关。 然而,根据社区常见问题,集成shared_preferences后卡住的一个常见原因是在main函数中直接使用await来读取首选项,导致UI线程等待。例如: 错误示例: ```dart void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); runApp(MyApp(prefs: prefs)); } ``` 虽然上述代码在大多数情况下可以工作,但如果读取操作耗时较长(比如在第一次初始化时),可能会让用户感觉应用启动卡住。更好的做法是在MyApp中使用FutureBuilder来异步加载首选项。 推荐做法: ```dart void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return FutureBuilder<SharedPreferences>( future: SharedPreferences.getInstance(), builder: (context, snapshot) { if (snapshot.hasData) { // 使用snapshot.data作为prefs return MaterialApp(...); } else { // 可以显示一个加载指示器 return MaterialApp(home: Scaffold(body: CircularProgressIndicator())); } }, ); } } ``` 另外,也有可能是shared_preferences的初始化在平台端出现问题。可以尝试以下步骤: -Android上,检查AndroidManifest.xml中是否配置了必要的权限(shared_preferences通常不需要额外权限,除非使用加密?但默认不需要)。 - 在iOS上,检查是否执行了pod install。 如果问题仍然存在,可以尝试升级Flutter和shared_preferences包到最新版本。 如果用户遇到的是在启动时卡住,且没有错误信息,可以尝试查看日志(尽管引用[2]提到不能使用print,但可以通过运行`flutter run`在终端查看日志,或者使用官方devtools)。在终端运行`flutter run`可能会输出一些错误信息。 步骤总结: 1. 更新pubspec.yaml中的shared_preferences到最新版本,并运行`flutter pub get`。 2. 运行`flutter clean`清除构建缓存。 3. 检查Android的gradle.properties中是否启用了AndroidX(如果没有,添加上述两行)。 4. 避免在main函数中同步等待shared_preferences,改用异步加载。 5. 运行`flutter run`查看详细日志。 如果上述方法无效,可以尝试创建一个新的Flutter项目,只集成shared_preferences,看是否同样卡住,以排除项目其他配置的影响。 相关问题: 1. 如何解决Flutter插件导致的启动卡顿问题? 2. shared_preferences在Flutter中的最佳实践是什么? 3. 如何调试Flutter应用启动时的卡死问题?</think>### Flutter 集成 shared_preferences 后应用卡住解决方案 当 Flutter 应用集成 `shared_preferences` 后出现无法运行或卡住问题,通常由以下原因导致: #### 常见原因及解决方案: 1. **AndroidX 兼容性问题** `shared_preferences` 要求项目使用 AndroidX。检查 `android/gradle.properties` 文件,确保包含: ```properties android.useAndroidX=true android.enableJetifier=true ``` 若缺失,添加后执行 `flutter clean` 并重新构建[^1]。 2. **同步阻塞主线程** **错误示例**:在 `main()` 中直接同步读取数据 ```dart void main() async { SharedPreferences prefs = await SharedPreferences.getInstance(); // ❌ 阻塞启动 runApp(MyApp()); } ``` **正确做法**:使用 `FutureBuilder` 异步加载 ```dart void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return FutureBuilder<SharedPreferences>( future: SharedPreferences.getInstance(), builder: (context, snapshot) { if (snapshot.hasData) { return MaterialApp(home: HomePage(prefs: snapshot.data!)); } return CircularProgressIndicator(); // 加载中显示进度条 }, ); } } ``` 3. **版本冲突** 在 `pubspec.yaml` 中使用最新兼容版本: ```yaml dependencies: shared_preferences: ^2.2.2 # 检查最新版本 ``` 执行升级命令: ```bash flutter pub upgrade --major-versions ``` 4. **平台配置缺失** - **Android**:确认 `minSdkVersion ≥ 16`(`android/app/build.gradle`) - **iOS**:执行 `pod install`(`ios/` 目录下) 完成后运行 `flutter clean`。 5. **初始化顺序错误** 确保在 `WidgetsFlutterBinding.ensureInitialized()` 之后调用: ```dart void main() async { WidgetsFlutterBinding.ensureInitialized(); // ✅ 先初始化绑定 final prefs = await SharedPreferences.getInstance(); // ... } ``` #### 调试步骤: 1. 通过终端运行查看详细日志: ```bash flutter run -v ``` 2. 检查是否包含以下关键错误: - `java.lang.IllegalStateException` → AndroidX 未启用 - `MissingPluginException` → 执行 `flutter clean` 和 `flutter pub get` - `TimeoutException` → 主线程阻塞 3. 最小化测试: 新建空白项目,仅添加 `shared_preferences` 依赖,验证基础功能: ```dart void testPrefs() async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('test', 'value'); print(prefs.getString('test')); // 应输出 'value' } ``` #### 替代方案(若仍失败): 使用 `hive` 作为轻量级替代存储: ```yaml dependencies: hive: ^2.2.3 hive_flutter: ^1.1.0 ``` ```dart await Hive.initFlutter(); final box = await Hive.openBox('myBox'); box.put('key', 'value'); ``` > **提示**:集成后卡住通常由 **主线程同步等待** 或 **AndroidX 配置缺失** 导致,优先检查这两点[^1][^2]。 --- ### 相关问题 1. 如何避免 Flutter 中异步操作阻塞 UI 渲染? 2. Flutter 插件在 Android 上需要哪些兼容性配置? 3. 除了 `shared_preferences`,Flutter 还有哪些本地存储方案? 4. 如何通过日志诊断 Flutter 应用启动崩溃问题? [^1]: Android Studio 插件配置指南 [^2]: Flutter 官方调试工具文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值