Flutter模拟器管理插件emulators的使用
Flutter模拟器管理插件emulators的使用
emulators
是一个用于自动化移动设备模拟器的工具库。它可以用来在多个设备上自动生成截图。
示例项目
您可以参考这个示例项目来了解如何使用该包为Flutter项目生成截图: flutter-emulators-screenshots-demo
该项目展示了如何使用此包生成Flutter项目的截图。
常见问题 (FAQ)
iOS状态栏不美观
确保您在模拟器中使用的iOS版本是16或更低版本(不是16.1或更高版本),如果您希望默认状态栏(时间、电池等)在所有截图中保持一致。
对于有运营商名称显示在状态栏中的手机(例如iPhone 8 Plus),请确保模拟器使用的是iOS 15.5或更低版本,以便插件可以移除运营商名称并添加蜂窝信号条。
更多信息可参阅:Xcrun simctl status bar not working on Xcode 14.1
Android模拟器随机错误或挂起
您可能会遇到adb
的bug。一个症状是当模拟器正在运行时,命令adb -s emulator-5554 emu avd name
的输出为空(其中emulator-5554
是您的模拟器名称)。
如果文件~/.emulator_console_auth_token
存在且为空,请停止模拟器并删除该文件。
更多信息可参阅:dart_emulators issue #4
示例代码
以下是一个完整的示例代码,展示如何使用emulators
插件:
import 'dart:io';
import 'package:emulators/emulators.dart';
Future<void> main() async {
final emu = await Emulators.build();
// 关闭所有正在运行的设备
await emu.shutdownAll();
// 使用adb / avdmanager / emulator / simctl助手
await emu.toolchain.emulator(['-list-avds']).string();
await emu.toolchain.avdmanager([
'create',
'avd',
'-n',
'Nexus_5X',
'-k',
'system-images;android-25;google_apis;x86',
'-f',
]).string();
// 尝试依次启动给定设备,并在每个设备上运行给定函数
await emu.forEach([
'iPhone 8 Plus',
'iPhone 12 Pro',
'Nexus_5X',
])((device) async {
// 创建截图助手
final screenshot = emu.screenshotHelper(
device: device,
androidPath: 'directory/for/android/screenshots',
iosPath: 'directory/for/ios/screenshots',
);
// 捕获截图并写入文件
await screenshot.capture('home_screen');
// 或者运行flutter drive,并将输出发送到stdout
final process = await emu.drive(device, 'test_driver/main.dart');
await stdout.addStream(process.stdout);
});
}
通过以上代码,您可以实现对多个设备的自动管理与操作,包括创建AVD、捕获屏幕截图以及运行Flutter驱动测试。
更多关于Flutter模拟器管理插件emulators的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html