添加flutter模块到现有android项目

参考https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

创建flutter module项目

比如现有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项目。

原项目引用flutter项目编译后的aar

在原项目的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代码

在主工程中新建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界面效果。

hot reload与调试

目前只能通过命令行工具来实现,在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

你可能感兴趣的:(flutter)