目录

  • 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实际存放位置进行配置:

flutter开发物联网 flutter开发教程_android studio

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并运行项目一样的效果,而不用重新打开一个项目工程。

flutter开发物联网 flutter开发教程_命令行_02

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

生成的模版代码文件:

flutter开发物联网 flutter开发教程_android studio_03

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多端接口一致性以及规范化管理实践