目标: 从
main.dart→ Gradle → JDK → Android SDK → 模拟器,
看懂 Flutter项目的整个启动链条。
环境示例:
Flutter 3.35.7 · Dart 3.5 · JDK 17 · Android SDK API 36 · Android Studio 2025
🧩 一、Flutter 工程的启动入口
📄 文件:lib/main.dart
import 'package:flutter/material.dart';
import 'app.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized(); // ① 初始化引擎绑定
runApp(MyApp()); // ② 启动根组件
}
🔍 执行流程:
1️⃣ Dart VM 启动 Flutter Framework
Flutter CLI 启动 Dart VM,执行 main()。
2️⃣ WidgetsFlutterBinding 连接引擎
在这里 Flutter 框架绑定底层引擎(C++ 实现),
打通 Framework ↔ Engine 的消息通道。
3️⃣ runApp() 渲染根 Widget
将 MyApp 注册到 Flutter 引擎的渲染树中。
从这一刻开始,Dart 层开始驱动画面。
🧱 二、应用主结构:lib/app.dart
import 'package:flutter/material.dart';
import 'pages/home_page.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(primarySwatch: Colors.blue),
home: HomePage(), // 首个页面
);
}
}
作用:
-
创建
MaterialApp根结构(类似 Android 的Application)。 -
注册全局主题、路由、首页等信息。
-
当构建完成后,
build()返回的 Widget 树通过 Flutter Engine → Skia 绘制到屏幕。
⚙️ 三、从 IDE 到 Gradle:构建链路启动
当你点击 ▶️ Run(或执行 flutter run) 时,
Flutter CLI 会触发一个多层调用链:
flutter run
↓
Flutter CLI(Dart 实现)
↓
调用 android/gradlew assembleDebug
↓
Gradle Wrapper 启动(基于 JDK 17)
↓
读取 build.gradle 构建脚本
↓
调用 Android SDK 工具链(aapt2 / d8 / dex)
↓
生成 app-debug.apk
🧩 四、关键构建配置文件
📄 1. android/build.gradle
控制 Gradle 版本、仓库源等:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:8.2.2"
}
}
📄 2. android/app/build.gradle
控制编译目标与包信息:
android {
namespace "com.example.flutter_project"
compileSdkVersion 36
defaultConfig {
applicationId "com.example.flutter_project"
minSdkVersion 21
targetSdkVersion 36
versionCode 1
versionName "1.0"
}
}
📄 3. android/local.properties
告诉 Gradle Android SDK 的路径:
sdk.dir=C:\\Users\\你的用户名\\AppData\\Local\\Android\\Sdk
📄 4. JDK 位置设置(Project Structure)
File → Project Structure → Project → Project SDK = JDK 17
Gradle 会用这个 JDK 启动编译任务。
🧩 五、Gradle 构建阶段
Gradle 实际上执行了以下任务链:
| 阶段 | 任务名 | 功能 |
|---|---|---|
| ① | flutterBuildDebug | 编译 Dart 代码生成 snapshot |
| ② | assembleDebug | 编译 Android 资源、清单、代码 |
| ③ | mergeDex | 将所有 .class 编译为 .dex 文件 |
| ④ | packageDebug | 打包 dex + 资源生成 APK |
| ⑤ | installDebug | 使用 adb 安装到设备 |
构建完成后,APK 会出现在:
build/app/outputs/flutter-apk/app-debug.apk
💻 六、Android 虚拟机运行阶段
1️⃣ 启动模拟器
在 Android Studio 中:
Tools → Device Manager → Pixel 6 API 36 → ▶️ Launch
2️⃣ 检查设备是否连接:
flutter devices
输出:
sdk_gphone64_x86_64 • emulator-5554 • android-x64 • Android 15 (API 36)
3️⃣ 安装 APK
Flutter CLI 执行:
adb install -r build/app/outputs/flutter-apk/app-debug.apk
🧩 七、Android 原生入口:MainActivity.kt
安装后,模拟器启动应用时首先进入:
📄 android/app/src/main/kotlin/.../MainActivity.kt
package com.example.flutter_project
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
// 默认继承 FlutterActivity,即可自动加载 Flutter 引擎
}
执行逻辑:
1️⃣ Android 系统调用 MainActivity.onCreate()
2️⃣ FlutterActivity 内部启动 FlutterEngine
3️⃣ FlutterEngine 加载 Dart AOT snapshot(编译后的 main.dart)
4️⃣ 框架重新运行 runApp(MyApp)
5️⃣ Flutter 渲染 UI → 显示到虚拟屏幕
🧠 八、完整执行链路图
[点击 Run]
↓
Flutter CLI
↓
Gradle Wrapper (JDK 17)
↓
Android SDK 工具链
↓
编译 Dart → 打包资源 → 生成 APK
↓
adb install → Pixel 6 模拟器
↓
Android 系统启动 MainActivity
↓
FlutterEngine 启动 runApp(MyApp)
↓
Dart Framework 构建 Widget 树
↓
Skia 渲染引擎绘制界面
↓
应用显示成功 ✅
🧾 九、启动验证命令
| 命令 | 功能 |
|---|---|
flutter doctor | 检查环境配置 |
flutter devices | 查看已连接设备 |
flutter run | 启动项目 |
flutter logs | 实时查看日志 |
adb logcat | 查看 Android 系统日志 |
flutter build apk --release | 打正式包 |
✅ 十、结语
Flutter 启动过程是一个多层协作的体系:
Dart VM → Flutter Framework → Gradle → JDK → Android SDK → 模拟器 → FlutterEngine → Skia。
1452

被折叠的 条评论
为什么被折叠?



