目录
- IDE技巧
- 1. 修改`pubspec.lock`文件解决依赖冲突
- 2. 哪些文件不需要加入VCS
- 3. dart SDK目录
- 4. flutter工程没有logcat窗口
- 命令行技巧
- 1. 重新生成flutter项目目录
- 2. 为package工程创建example
- 3. flutter插件工程安装apk
- 4. flutter SDK配置代理
- 5. dart pub global
- 6. Pigeon多端接口一致性实现方案
- 7. 代码混淆
- 参考资料
IDE技巧
1. 修改pubspec.lock文件解决依赖冲突
pubspec.lock是flutter pub get过程中生成的依赖库图谱文件,文件中列出的依赖库及版本号才是真实打包使用的版本号。直接修改该文件中依赖库的版本号,然后执行pub get命令,可以下载使用对应版本三方库。
2. 哪些文件不需要加入VCS
flutter工程中需要加入VCS的文件其实都列在.gitignore文件中了,但是有时候不全,重点关注下pubspec.lock这个文件,其实也是编译生成物,不需要加入VCS。
3. dart SDK目录
老生畅谈的问题,但是还是截个图备忘一下,根据flutter SDK实际存放位置进行配置:
4. flutter工程没有logcat窗口
打开:Project Structure>Facets,点击新建按钮,选择android,保持默认配置,点击确认即可。
命令行技巧
1. 重新生成flutter项目目录
进入项目目录,执行:
flutter create .
# 如果是插件,新版的flutter sdk需要你指定插件的平台
flutter create --platforms=ios,android .
会根据flutter create原来的配置创建对应的工程目录。比如当你删除android或ios目录时,使用这个命令可以将缺失的目录重新生成。
2. 为package工程创建example
进入项目目录,执行:
flutter create example
会生成对应的example代码,然后在example的pubspec.yaml中引用lib代码即可。
3. flutter插件工程安装apk
乍一看这个需求非常鸡肋,但是经过实践发现实际上直接运行flutter的example和通过命令行gradle命令编译安装apk效果还是不一样的,有写情况下需要通过gradle命令来编译和安装apk:
# 进入example下android目录
cd example/android
# 编译example:app,生成apk,这步可以跳过,按需即可
gradlew :app:assembleDebug
# 安装apk
gradlew :app:installDebug
上述步骤可以实现与右键打开Open Android module in Android Studio并运行项目一样的效果,而不用重新打开一个项目工程。
4. flutter SDK配置代理
在内网开发环境下,可能一些库无法正常下载,flutter pub get执行失败。可以通过配置代理来解决,flutter下载依赖库实际上借助了git和batch/shell中的下载命令,因此需要为git配置和命令行都配置代理:
Git配置代理方法:
# 代理可以是http://127.0.0.1:1080,或者不带协议127.0.0.1:1080,按实际情况
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy http://127.0.0.1:1080
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
更多Git使用技巧:Git常用操作
命令行配置代理方法(只对当前命令行窗口生效):
# 代理无用户名密码
set http_proxy=http://127.0.0.1:1080
set https_proxy=http://127.0.0.1:1080
# 具有用户名密码
set HTTP_PROXY=http://proxy.com:port
set HTTP_PROXY_USER=username
set HTTP_PROXY_PASS=password
set HTTPS_PROXY=http://proxy.com:port
set HTTPS_PROXY_USER=username
set HTTPS_PROXY_PASS=password
# 取消网络代理
netsh winhttp reset proxy
更多batch使用方法:bat脚本:快速入门
5. dart pub global
dart pub global命令可以添加/移除dart脚本到dart全局脚本库中,添加后即可在命令行执行脚本package中bin目录下的脚本的命令。可以利用此特性开发一些常用的flutter脚本工作,并发布到仓库供他人使用。
# 添加启用脚本
dart pub global activate <pub.dartlang package>
# 移除脚本
dart pub global deactivate <pub.dartlang package>
6. Pigeon多端接口一致性实现方案
- 创建插件工程
flutter create --org com.exmple --template plugin flutterPigeonDemo
- 添加pigeon依赖
dev_dependencies:
flutter_test:
sdk: flutter
pigeon:
version: 0.1.7
- 创建接口及定义输出配置
以pigeons/pigeonDemoMessage.dart为例:
import 'package:pigeon/pigeon.dart';
class DemoReply {
String result;
}
class DemoRequest {
String methodName;
}
// 需要实现的api
@HostApi()
abstract class PigeonDemoApi {
DemoReply getMessage(DemoRequest params);
}
// 输出配置
void configurePigeon(PigeonOptions opts) {
opts.dartOut = './lib/PigeonDemoMessage.dart';
opts.objcHeaderOut = 'ios/Classes/PigeonDemoMessage.h';
opts.objcSourceOut = 'ios/Classes/PigeonDemoMessage.m';
opts.objcOptions.prefix = 'FLT';
opts.javaOut =
'android/src/main/kotlin/com/example/flutter_pigeon_demo/PigeonDemoMessage.java';
opts.javaOptions.package = 'package com.example.flutter_pigeon_demo';
}
- 生成接口模版
flutter pub run pigeon --input pigeons/pigeonDemoMessage.dart
生成的模版代码文件:
7. 代码混淆
flutter < 1.16.2:Obfuscating Dart Code flutter >= 1.16.2:Obfuscating Dart Code
flutter build apk --obfuscate --split-debug-info=/<project-name>/<directory>
在我的工程中,开启和关闭--obfuscate前后的release包体积分别为:42436KB和41452KB,减少了984KB,体积缩小了2.3%,原生代码体量比较大的缘故,差别不是很大。
参考资料
- dart pub global
- assets_generator:自动生成assets资源名称并自动注册的脚本工作
- Pigeon- Flutter多端接口一致性以及规范化管理实践