Flutter 工程模板主要有:
- Flutter
app
- Flutter
module
- Flutter
plugin
- Flutter
package
我是怎么知道有这些项目类型的呢?查看flutter create -h
命令:
-t, --template=<type> Specify the type of project to create.
[app] (default) Generate a Flutter application.
[package] Generate a shareable Flutter project containing modular Dart code.
[plugin] Generate a shareable Flutter project containing an API in Dart code with a platform-specific implementation for
Android, for iOS code, or for both.
复制代码
从 -t
这个模板来看,目前只有 3 个啊,还有一个 module
是在哪里呢?后来看 flutter git 上的 wiki Add-Flutter-to-existing-apps 里面提供了,创建了一个module 项目的命令;有点奇怪 flutter 团队为什么不把 module 也放到这个 help 里面呢?
创建这 4 个项目模板
flutter create -t app --org com.example my_flutter_app
flutter create -t module --org com.example my_flutter_module
flutter create -t plugin --org com.example my_flutter_plugin
flutter create -t package --org com.example my_flutter_package
复制代码
app 目录结构
从 gradle 看,这个主要是 app, 能够直接生成 apk; 并且都带有 libflutter.so 和 flutter 其他的产物;就是一个完整的 flutter 项目直接生成可按照的应用,最常见;
module 目录结构
从 gradle 来看,这应该是一个 lib
; 可以生成 aar; 这个 aar 会有flutter 的产物(libflutter.so, assert 目录); 根据Add-Flutter-to-existing-apps 里面可以使用 flutter build aar
来生成 aar; 这里在 1.7.8 stable 中这个命令不见了,后来调研了一下,在最新的 master 分支上,这个命令被修复回来了;
plugin 目录结构
flutter-project-plugin.png
plugin 主要是可以支持 dart 和原生代码一起编译打包查看(也可以没有原生代码),对应 android 来说,可以是一个 lib 项目;
packag 目录结构
flutter-project-package.png
可以看出来都是 dart 代码;当 plugin 模板中没有原生代码的时候,我认为 plugin 也是package;从官方文档上来看 flutter.dev/docs/develo… , packages 和 plugins 都可以上传到 pub 仓库中,所以我觉得 plugin 应该是比较特殊的 package 吧;
结论
- APP: 就是正常的 dart 项目,打包好了后跑到不同的平台上
- Module: 有 java 和 dart 代码,可以打包成 aar, 然后给 app 依赖;
- Plugin: gradle 配置是 lib 类型的 Android 工程,可以认为是一个lib, 可以依赖 aar 和 dart lib
- Package: 只有 dart 代码, 可以用来生成 dart lib;