参考https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
比如现有android项目的目录为~/myDemo/,则直接在原有项目同级目录~下执行如下命令创建flutter module项目。
flutter create -t module my_flutter
执行上述命令后,~目录会生成一个my_flutter目录,里面其实就是一个完整的flutter项目,与普通项目不同的是android和ios目录均为隐藏目录,另外android和ios打包后都是依赖库,比如android的aar。
使用如下命令编译aar,编译后文件位于.android/Flutter/build/outputs/aar/
cd .android
./gradlew flutter:assembleDebug
update:
android studio 3.2及以上支持直接创建flutter module,在file – create new flutter project菜单中选择flutter module,按照向导操作即可。好处是后面可以直接用android studio导入flutter项目。
在原项目的settings.gradle中添加如下依赖
include ':app' // assumed existing content
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir.parentFile, // new
'my_flutter/.android/include_flutter.groovy' // new
))
在主模块app的build.gradle中添加依赖
dependencies {
implementation project(':flutter')
}
在主工程中新建flutter界面容器,比如下面代码中的LocationFlutterActivity,然后在其中将FlutterView作为contentView即可。在主工程中新建flutter界面容器,比如下面代码中的LocationFlutterActivity,然后在其中将FlutterView作为contentView即可。
class LocationFlutterActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val flutterView = Flutter.createView(this, getLifecycle(), "route1")
setContentView(flutterView)
}
}
打包原工程进入LocationFlutterActivity界面即可看到Flutter界面效果。
目前只能通过命令行工具来实现,在flutter项目下执行如下命令准备连接到设备端调试
cd my_flutter
flutter attach
然后在android studio中点击debug按钮在设备上运行app,当进入flutter界面时,终端上显示如下信息
[wangxue@wangxue-mac] node$ flutter attach
Waiting for a connection from Flutter on BAH AL00...
Done.
Syncing files to device BAH AL00... 1.8s
? To hot reload changes while running, press "r". To hot restart (and rebuild
state), press "R".
An Observatory debugger and profiler on BAH AL00 is available at:
http://127.0.0.1:65300/
For a more detailed help message, press "h". To detach, press "d"; to quit,
press "q".
此时只需要在电脑端修改flutter代码,然后在终端中输入r即可实现hot reload。
在电脑中打开dar调试地址http://127.0.0.1:65300/,可以实现dart代码断点调试等。
在现有android项目中添加flutter模块,本质上是使用flutter create -t module 命令新建一个flutter项目,然后编译为一个aar,再在原有项目中引用该aar,达到flutter界面作为既有android项目模块的效果。
在创建FlutterView时发现getLifeCycle方法找不到,该方法是v27版本的SupportActivity提供的,一般是因为引用的AppCompat-v7库版本过低导致,通过如下命令检查依赖并升级appcompat库到v27.1.1即可, androidx库由于较新则不会有该问题。
./gradlew app:denpendencies