android项目集成 flutter
16lz
2021-01-26
官方链接参考
目前大部分项目都是已经有原生的了,然后集成flutter作为子模块开发,趟了一些坑,记录一下
- flutter目前只支持 arm v7 和v8 架构
android { //... defaultConfig { ndk { // Filter for architectures supported by Flutter. abiFilters 'armeabi-v7a', 'arm64-v8a' } }}
- 需要java 1.8的支持
compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 }
- 官方提供了将flutter 模块打包成aar 或者直接项目源码依赖的两种方式,不是很大的项目都可以源码依赖,创建flutter module 的时候注意 是否需要支持 androidx ,默认是支持 ,但我估计很多小伙伴的项目由于各种历史应该并没有迁移到anroidx。那创建模块的时候 注意加下面这个参数 --no-androidx
否则AS 各种奇怪的报错等着你
flutter create -t module --no-androidx myflutter
创建modle 的时候注意是在原项目内,还是和原项目同一级目录, 如果是同原项目平级, settings.gradle的设置如下
include ':app' // assumed existing contentsetBinding(new Binding([gradle: this])) // newevaluate(new File( // new settingsDir.parentFile, // new 'myflutter/.android/include_flutter.groovy' // new))
如果是在原项目内部 ,一个是parentFile 一个是path ,别弄混了
include ':app' // assumed existing contentsetBinding(new Binding([gradle: this])) // newevaluate(new File( // new settingsDir.path, // new 'my_flutter/.android/include_flutter.groovy' // new))
app 的gradle 中的配置 始终是如下 注意项目名称 并不是你想的刚才创建module指定的名称,为啥是这样,你可以参考.android/include_flutter.groovy文件就知道了
implementation project(':flutter')
flutter 提供了几种交互的方式,原生打开flutter提供的Activity的方法是 , 但这里你会观察到黑屏后才打开,这是因为flutter初始化渲染引擎需要时间,那怎么办呢,
myButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity( FlutterActivity.createDefaultIntent(context) ); }});
flutter 建议我们再application 中初始化并缓存起来,这样就不会有黑屏了。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // Instantiate a FlutterEngine. flutterEngine = new FlutterEngine(this); // Start executing Dart code to pre-warm the FlutterEngine. flutterEngine.getDartExecutor().executeDartEntrypoint( DartEntrypoint.createDefault() ); // Cache the FlutterEngine to be used by FlutterActivity. FlutterEngineCache .getInstance() .put("my_engine_id", flutterEngine); }}
调动的时候通过id 去查找缓存的渲染引擎
myButton.addOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity( FlutterActivity .withCachedEngine("my_engine_id") .build(context) ); }});
更多相关文章
- Android程序开发初级教程(三)
- 2016年Android新技术到底有哪些
- GIT和repo使用方法:下载内核 android源码包
- Android(安卓)SDK各个版本API的特性及兼容性(Dalvik/ART)
- Okhttp封装
- Android(安卓)Studio创建Serializable对象时自动生成serialVersi
- Android记事本项目开发
- Android(安卓)创建activity流程-基于api28
- ActivityThread-activity启动分析