官方链接参考
目前大部分项目都是已经有原生的了,然后集成flutter作为子模块开发,趟了一些坑,记录一下

  1. flutter目前只支持 arm v7 和v8 架构
android {  //...  defaultConfig {    ndk {      // Filter for architectures supported by Flutter.      abiFilters 'armeabi-v7a', 'arm64-v8a'    }  }}
  1. 需要java 1.8的支持
compileOptions {    sourceCompatibility 1.8    targetCompatibility 1.8  }
  1. 官方提供了将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)      );  }});

更多相关文章

  1. Android程序开发初级教程(三)
  2. 2016年Android新技术到底有哪些
  3. GIT和repo使用方法:下载内核 android源码包
  4. Android(安卓)SDK各个版本API的特性及兼容性(Dalvik/ART)
  5. Okhttp封装
  6. Android(安卓)Studio创建Serializable对象时自动生成serialVersi
  7. Android记事本项目开发
  8. Android(安卓)创建activity流程-基于api28
  9. ActivityThread-activity启动分析

随机推荐

  1. 有关数据库SQL递归查询在不同数据库中的
  2. 记一次公司仓库数据库服务器死锁过程及解
  3. 实用的银行转账存储过程和流水号生成存储
  4. sql server代理中作业执行SSIS包失败的解
  5. SQL Server数据库中批量导入数据的2种方
  6. 浅谈基于SQL Server分页存储过程五种方法
  7. SQL Server数据汇总五招轻松搞定
  8. 如何监测和优化OLAP数据库
  9. java 连接sql server2008数据库配置
  10. 详解SQLServer和Oracle的分页查询