按官网指示操作记录,顺便解决一些坑。
https://flutter.dev/docs/development/add-to-app/android/project-setup
前提:已经拥有一个安卓工程。
1、在安卓工程中创建一个flutter module
方法1:命令行方式
打开终端,cd进入工程目录,执行
flutter create -t module flutter_library
创建完记得打开工程根目录的settings.gradle,include一下你的flutter module,并且加上:
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile,
'你的主项目名称/flutterMoudle的名称/.android/include_flutter.groovy'
))
方法2:AS里创建,具体见上面官网。
创建好如图:
2、给flutter module打aar
打开终端,cd进入flutter_library目录,执行
flutter build aar
终端执行结果如图:
去这个路径下可以找到打出的aar和pom:build/host/outputs/repo/....
打开你想引用的pom文件,比如debug-1.0.pom,这里面的dependency不需要都引用,根据你自己机器cpu的需求去引用,比如不用模拟器就不用引用x86的。
3、在app中引用刚才打好的aar:
官网会告诉你在app/build.gradle中加入仓库:
String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
repositories {
maven {
url '/Users/xuchun/AndroidProject/kotlinstudy/flutter_library/build/host/outputs/repo'
}
maven {
url '$storageUrl/download.flutter.io'
}
}
其实不需要,这样即可:
repositories {
maven {
url 'http://download.flutter.io'
}
然后再下面的dependencies中加入aar的引用即可:
implementation project(":flutter")
implementation 'io.flutter:flutter_embedding_debug:1.0.0-75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d'
implementation 'io.flutter:armeabi_v7a_debug:1.0.0-75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d'
implementation 'io.flutter:arm64_v8a_debug:1.0.0-75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d'
然后Sync后,aar就引入成功了。
关于引入aar成功后在原生页面中展示fullter页面的:
我使用了两种方式,FlutterActivity和FlutterView,只有FlutterActivity成功展示出来了。
1、FlutterActivity的写法(kotlin):
bt.setOnClickListener {
startActivity(
//引擎缓存
FlutterActivity
.withCachedEngine("my_engine_id")
.build(this)
// FlutterActivity.createDefaultIntent(this)//没有引擎缓存
)
引擎缓存可以让启动FlutterActivity时,Flutter内容的显示延迟大大减少。具体设置方式在上面的官网地址中有。
2、FlutterView的写法(kotlin):
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(activity_main)
setSupportActionBar(toolbar)
init()
val flutterEngine = FlutterEngineCache.getInstance().get("my_engine_id")
val flutterView = FlutterView(this)
val lp: FrameLayout.LayoutParams =
FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
// 关键代码,将Flutter页面显示到FlutterView
flutterView.attachToFlutterEngine(flutterEngine!!)
layout_frame.addView(flutterView, lp)
}
上面代码还是显示不出flutter的页面,有知道为什么的朋友请给我留言,非常感谢!