Android adb 常用命令

为设备安装包

1
2
3
4
adb install -t build/app/outputs/flutter-apk/app-debug.apk

# 指定设备安装
adb -s 77a3675c install -t build/app/outputs/flutter-apk/app-debug.apk

部分手机纯净模式下每次安装未验证apk包时会有安装二次确认 需要输入密码 可以在开发者选项中 关闭“监控ADB安装应用”选项 解决

查看真机运行日志

查看所有 Dart & Android 层 log,Release 包仍然可以用 logcat 打印 print()、debugPrint() 输出

1
2
3
4
adb logcat -s flutter

# 指定设备查看
adb -s 77a3675c logcat -s flutter

sdk版本切换

fvm

社区版本管理插件

手动切换环境变量

拉取flutter官方github仓库 切换到对应版本tag后复制源代码到本地flutter_sdks文件夹内 手动更改系统环境变量即可

1
E:\flutter_sdks\flutter-3.35.7\bin

切换版本更改环境变量后必须所有终端关闭后重新打开 或者重启电脑

如果出现更改后版本仍然不对的情况时 通过运行where flutter查询当前所有引用的sdk path 排序决定当前最新应用版本

1
2
3
4
5
$ where flutter
E:\flutter_sdks\flutter-3.27.3\bin\flutter
E:\flutter_sdks\flutter-3.27.3\bin\flutter.bat
E:\flutter_sdks\flutter-3.35.7\bin\flutter
E:\flutter_sdks\flutter-3.35.7\bin\flutter.bat

可以在.bashrc中显示指定当前需要应用的版本确保正确

1
2
# flutter sdk
export PATH="/e/flutter_sdks/flutter-3.35.7/bin:$PATH"

运行环境

内置环境

Flutter 内置三种运行模式

模式 特点 编译命令
debug 热重载、断点调试、性能未优化 flutter run
profile 性能分析,接近 release 性能 flutter run --profile
release 关闭断言、开启优化、正式发布用 flutter run --release

判断当前模式:

1
2
3
4
5
6
import 'package:flutter/foundation.dart';

if (kDebugMode) print("debug 模式");
if (kProfileMode) print("profile 模式");
if (kReleaseMode) print("release 模式");

自定义环境

如在测试环境build release包但需走开发测试接口调试场景 同web端一致

通过dart-define注入参数

1
2
flutter run --dart-define=mode=dev
flutter build apk --dart-define=mode=prod

代码中读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import 'dart:convert';
import 'package:flutter/services.dart';

class Env {
static late String mode;
static late Map<String, dynamic> config;

static Future<void> load() async {
mode = const String.fromEnvironment("mode", defaultValue: "dev");
final String fileContent = await rootBundle.loadString("env/$mode.json");
config = json.decode(fileContent);
}

static String get getMode => mode;
static bool get isDev => mode == 'dev';
static bool get isTest => mode == 'test';
static bool get isProd => mode == 'prod';

static String get apiUrl => config["apiUrl"];
}

调试模式下切换走不同的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"configurations": [
{
"name": "record (dev)",
"request": "launch",
"type": "dart",
"args": [
"--dart-define=mode=dev"
]
},
{
"name": "record (test)",
"request": "launch",
"type": "dart",
// "flutterMode": "profile",
"args": [
"--dart-define=mode=test"
]
},
{
"name": "record (prod)",
"request": "launch",
"type": "dart",
// "flutterMode": "release",
"args": [
"--dart-define=mode=prod"
]
}
}

ios蓝牙机制

app蓝牙权限异常

当你从 控制中心(下拉的快捷开关) 关闭蓝牙时,iPhone 并不会完全关闭蓝牙模块,
而是:只断开当前的蓝牙连接(耳机、手表等),直到第二天早上 5 点之前,不会自动重新连接这些设备
但蓝牙系统本身依然保持开启,以便 AirDrop、定位、App、手表解锁等系统功能 能继续使用。

amdroid端需开启允许搜索附近设备权限

热更新 shorebird

参照shorebird文档 安装本地依赖环境

bash安装异常 powershell中安装后:

  1. 如果需要升级版本: 更改pubspec.yaml_version: 1.0.0+4
  2. 打包:shorebird release android –flutter-version=3.27.4 –artifact=apk
  3. 打补丁热更新:更改代码后直接 shorebird patch –platforms=android –release-version=1.0.0+4,为指定版本号打补丁