# flutter_ume
**Repository Path**: ByteDance/flutter_ume
## Basic Information
- **Project Name**: flutter_ume
- **Description**: UME is an in-app debug kits platform for Flutter. Produced by Flutter Infra team of ByteDance
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 7
- **Forks**: 0
- **Created**: 2022-08-26
- **Last Updated**: 2025-09-03
## Categories & Tags
**Categories**: devtools
**Tags**: None
## README
# flutter_ume
[English](./README.md)
Flutter 应用内调试工具平台
[](https://pub.dev/packages/flutter_ume) [](https://github.com/bytedance/flutter_ume/blob/master/LICENSE)
[](https://pub.dev/packages/flutter_ume)
[](https://pub.dev/packages/flutter_ume)
[](https://pub.dev/packages/flutter_ume)
[](https://pub.dev/packages/flutter_ume)
[](https://pub.dev/packages/flutter_ume)
**Since `^1.0.0`, flutter_ume starts adapting to the Flutter 3. See [Quick Start] to learn more.**
扫码或点击链接下载 apk,快速体验 UME。
https://github.com/bytedance/flutter_ume/releases/download/v0.2.1.0/app-debug.apk
最新版本(1.0.1)内置 13 个插件,
开发者可以创建自己的插件,并集成进 UME 平台。
详见本文[为 UME 开发插件](#为-ume-开发插件)部分。
**更多开源社区贡献的调试插件,请见[社区插件](#社区插件)部分。**
- [flutter_ume](#flutter_ume)
- [快速接入](#快速接入)
- [特别说明](#特别说明)
- [功能介绍](#功能介绍)
- [为 UME 开发插件](#为-ume-开发插件)
- [快速集成嵌入式插件](#快速集成嵌入式插件)
- [如何在 Release/Profile mode 下使用 UME](#如何在-releaseprofile-mode-下使用-ume)
- [版本说明](#版本说明)
- [兼容性](#兼容性)
- [单测覆盖率](#单测覆盖率)
- [版本号规则](#版本号规则)
- [Null-safety 版本](#null-safety-版本)
- [更新日志](#更新日志)
- [开源贡献](#开源贡献)
- [贡献者](#贡献者)
- [社区插件](#社区插件)
- [第三方开源项目说明](#第三方开源项目说明)
- [开源协议](#开源协议)
- [联系开发者](#联系开发者)
## 快速接入
**所有名称前缀为 `flutter_ume_kit_` 的 package 都是 UME 的功能插件,**
**用户可按需接入。**
1. 修改 `pubspec.yaml`,添加依赖
**自 `1.0.0` 版本开始适配 Flutter 3。**
``` yaml
dev_dependencies:
flutter_ume: ^1.0.1
flutter_ume_kit_ui: ^1.0.0
flutter_ume_kit_device: ^1.0.0
flutter_ume_kit_perf: ^1.0.0
flutter_ume_kit_show_code: ^1.0.0
flutter_ume_kit_console: ^1.0.0
flutter_ume_kit_dio: ^1.0.0
```
**↓ Null-safety 版本,适用于 Flutter 2.x**
``` yaml
dev_dependencies:
flutter_ume: ^0.3.0+1
flutter_ume_kit_ui: ^0.3.0+1
flutter_ume_kit_device: ^0.3.0
flutter_ume_kit_perf: ^0.3.0
flutter_ume_kit_show_code: ^0.3.0
flutter_ume_kit_console: ^0.3.0
flutter_ume_kit_dio: ^0.3.0
```
**↓ 非 Null-safety 版本,适用于 Flutter 1.x**
``` yaml
dev_dependencies:
flutter_ume: ^0.1.1
flutter_ume_kit_ui: ^0.1.1
flutter_ume_kit_device: ^0.1.1
flutter_ume_kit_perf: ^0.1.1
flutter_ume_kit_show_code: ^0.1.1
flutter_ume_kit_console: ^0.1.1
```
2. 执行 `flutter pub get`
3. 引入包
``` dart
import 'package:flutter_ume/flutter_ume.dart'; // UME 框架
import 'package:flutter_ume_kit_ui/flutter_ume_kit_ui.dart'; // UI 插件包
import 'package:flutter_ume_kit_perf/flutter_ume_kit_perf.dart'; // 性能插件包
import 'package:flutter_ume_kit_show_code/flutter_ume_kit_show_code.dart'; // 代码查看插件包
import 'package:flutter_ume_kit_device/flutter_ume_kit_device.dart'; // 设备信息插件包
import 'package:flutter_ume_kit_console/flutter_ume_kit_console.dart'; // debugPrint 插件包
import 'package:flutter_ume_kit_dio/flutter_ume_kit_dio.dart'; // Dio 网络请求调试工具
```
4. 修改程序入口,增加初始化方法及注册插件代码
``` dart
void main() {
if (kDebugMode) {
PluginManager.instance // 注册插件
..register(WidgetInfoInspector())
..register(WidgetDetailInspector())
..register(ColorSucker())
..register(AlignRuler())
..register(ColorPicker()) // 新插件
..register(TouchIndicator()) // 新插件
..register(Performance())
..register(ShowCode())
..register(MemoryInfoPage())
..register(CpuInfoPage())
..register(DeviceInfoPanel())
..register(Console())
..register(DioInspector(dio: dio)); // 传入你的 Dio 实例
// flutter_ume 0.3.0 版本之后
runApp(UMEWidget(child: MyApp(), enable: true)); // 初始化
// flutter_ume 0.3.0 版本之前
runApp(injectUMEWidget(child: MyApp(), enable: true)); // 初始化
} else {
runApp(MyApp());
}
}
```
5. `flutter run` 运行代码
或 `flutter build apk --debug`、`flutter build ios --debug` 构建产物
> 部分功能依赖 VM Service,本地运行需要添加额外参数,以确保能够连接到 VM Service。
>
> Flutter 2.0.x、2.2.x 等版本在真机上运行,`flutter run` 需要添加 `--disable-dds` 参数。
> 在 [Pull Request #80900](https://github.com/flutter/flutter/pull/80900) 合入之后,`--disable-dds` 参数被更名为 `--no-dds`。
## 特别说明
**自 `0.1.1`/`0.2.1` 版本起,已经不需要设置 `useRootNavigator: false`。**
以下部分仅适用于 `0.1.1`/`0.2.1` 之前的版本。
由于 UME 在顶层管理了路由栈,`showDialog` 等方法默认使用 `rootNavigator` 弹出,
所以**必须**在 `showDialog`、`showGeneralDialog` 等弹窗方法,传入参数 `useRootNavigator: false` 避免路由栈错误。
``` dart
showDialog(
context: context,
builder: (ctx) => AlertDialog(
title: const Text('Dialog'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text('OK'))
],
),
useRootNavigator: false); // <===== 非常重要
```
## 功能介绍
当前开源版 UME 内置了 13 个插件
## 为 UME 开发插件
> UME 插件位于 `./kits` 目录下,每个插件包都是一个 `package`
> 本小节示例可参考 [`./custom_plugin_example`](./custom_plugin_example/)
1. `flutter create -t package custom_plugin` 创建一个插件包,可以是 `package`,也可以是 `plugin`
2. 修改插件包的 `pubspec.yaml`,添加依赖
``` yaml
dependencies:
flutter_ume: '>=0.3.0 <0.4.0'
```
3. 创建插件配置,实现 `Pluggable` 虚类
``` dart
import 'package:flutter_ume/flutter_ume.dart';
class CustomPlugin implements Pluggable {
CustomPlugin({Key key});
@override
Widget buildWidget(BuildContext context) => Container(
color: Colors.white
width: 100,
height: 100,
child: Center(
child: Text('Custom Plugin')
),
); // 返回插件面板
@override
String get name => 'CustomPlugin'; // 插件名称
@override
String get displayName => 'CustomPlugin';
@override
void onTrigger() {} // 点击插件面板图标时调用
@override
ImageProvider