-
Notifications
You must be signed in to change notification settings - Fork 0
Flutter : add flutter to native project
Ren Ye edited this page Jan 3, 2019
·
50 revisions
优点:可debug调试 可hot reload
缺点:团队所有成员均要安装flutter 及其附属工具 编译环境,并简单掌握flutter相关知识
Ps: Google官方实现文档 https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
1. 任意文件路径下
$ cd some/path/
$ flutter create -t module my_flutter (或者 flutter create --template=module my_flutter)

2.原生工程目录下settings.gradle:
// MyApp/settings.gradle
include ':app' // assumed existing content
setBinding(new Binding([gradle: this])) // new
evaluate(new File('/Users/eminem/Desktop/my_flutter/.android/include_flutter.groovy') // new
3.原生工程目录下build.gradle:
// MyApp/app/build.gradle
dependencies {
implementation project(':flutter'):
}

4.原生代码启动flutter界面 如下:

5.可能会碰到如下错误:
缺少.so文件
(flutter项目根目录下执行,flutter build apk --release --target-platform android-arm,得到apk)


缺少dart编译解释器
(flutter项目根目录下执行,flutter build aot)


缺少flutter assete
(flutter项目根目录下执行,flutter build bundle)


1.原生项目podfile添加module依赖

2.原生项目目录下执行pod install 绑定库

3.添加Dart code 的 build phase
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed

4.原生调用flutter界面

优点:团队 人员工作解耦 开发flutter的 开发原生android 开发原生 iOS的 ,各司其职。
缺点:团队中无flutter开发环境的,无法调试。
1.$flutter create --template=module libratone_flutter_plugin
2.注释掉 /Users/eminem/Desktop/libratone_flutter_plugin/.android/app/build.gradle 文件中
//applicationId "com.example.libratoneflutterplugin.host"

3.$ flutter create --template=app libratone_flutter_plugin
flutter项目结构变化如下
(android/iOS 2个文件目录用于flutter以application mode运行,
.android/.iOS 2个文件目录用户flutter以module mode运行)

以我认知flutter允许多种模式文件结构并存,如下图说明:

4. 若想单独运行flutter,会遇到如下问题。附带解决方案

Ps: 闲鱼团队技术分享文档 https://zhuanlan.zhihu.com/p/40528502 ,思路来自闲鱼,实现其来和他们的不同
1. android目录 以library形式

2. android目录 manifest 去掉 application 标签的属性

3. flutter项目根目录执行 flutter build apk --release --target-platform android-arm
得到release aar ,去掉--release 可得到 debug版本。 android-arm 为V7的包 ,android-arm64 v8的包

4.若flutter项目有第三方库,也需要有相应aar,生成方式和文件目录如下图



会遇到下面这个问题和解决方案
(导入flutter_shared 目录,重新编译aar,本地工程引入引用)

