快速实现Android项目内嵌Flutter页面(混合开发)

一、新建Android Project和Flutter Module

1、新建Android Project  --  AndroidEmbedProject

此处省略创建过程

2、新建Flutter Module  --  my_flutter_module(与Android Project位于同级目录)

创建完成后项目目录如图所示:

二、添加android项目配置

1、在AndroidEmbedProject的settings.gradle文件中添加如下配置

​​​​​​​setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir.parentFile,
        'my_flutter_module/.android/include_flutter.groovy'
))
// 若AndroidEmbedProject与my_flutter_module位于不同级目录,则路径应为
// 上级目录/my_flutter_module/.android/include_flutter.groovy

Sync后,可以看到除了app module之外,还有一个flutter module

2、在app的build.gradle中添加配置

android {
    //...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
dependencies {
    //...
    implementation project(':flutter')
}

至此,FlutterModule已集成到Android项目中

tips:还有一种使用AAR集成FlutterModule的方法,优点在于其他Android app开发人员不需要安装Flutter SDK便可正常编译项目,但实现过程稍微复杂些,此处不做介绍,详细实现方法请参考文章底部文档链接。

三、显示Flutter界面

方式1:使用FlutterActivity

在AndroidManifest.xml中添加activity标签

<activity
     android:name="io.flutter.embedding.android.FlutterActivity"
     android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
     android:hardwareAccelerated="true"
     android:windowSoftInputMode="adjustResize" />

启动FlutterActivity有三种方法:

1、默认方法

startActivity(
      FlutterActivity.createDefaultIntent(currentActivity)
    );

2、使用FlutterEngine

startActivity(
        FlutterActivity
                .withNewEngine()
                .initialRoute("/")
                .build(MainActivity.this)
);

可以看到,flutter界面启动过程中会有一个短暂的白屏,这是因为使用以上两种方法每次打开ftter界面时需要一定的初始化时间

解决方法:

自定义Application并重写onCreate()方法,在方法中创建FlutterEngine并添加到缓存;启动flutter界面时只需使用缓存中的FlutterEngine(通过engineid获取),界面跳转速度便得以大幅提升。

具体方法实现如下所示

3、使用FlutterEngineCache中的FlutterEngine

(1)自定义application,创建FlutterEngine并存放在FlutterEngineCache中

public class MyApplication extends Application {
​
    private FlutterEngine flutterEngine;
​
    @Override
    public void onCreate() {
        super.onCreate();
​
        flutterEngine = new FlutterEngine(this);
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );
        //endineid为自定义内容
        FlutterEngineCache
                .getInstance()
                .put("engine_id", flutterEngine);
    }
​
}

(2)通过engineid获取FlutterEngine并启动界面

startActivity(
        FlutterActivity.withCachedEngine("engine_id").build(MainActivity.this)
);

可以看到,flutter界面启动现在变得灰常流畅

方式2:使用FlutterFragment

1、默认方法

FlutterFragment flutterFragment = FlutterFragment.createDefault();
getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.frameLayout, flutterFragment)
        .commit();

使用此方法启动FlutterFragment时延迟较大

2、使用FlutterEngineCache中的FlutterEngine

(1)自定义application,并初始化FlutterEngine(具体实现方式同上)

(2)启动FlutterFragment

FlutterFragment flutterFragment=FlutterFragment.withCachedEngine("engine_id").build();
getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.frameLayout, flutterFragment)
        .commit();

肉眼可见FlutterFragment启动过程相比于上一个方法流畅了不少。

以上内容便是快速实现Android项目内嵌Flutter页面的方法

若需了解更多实现细节,请参考官方文档:Add Flutter to existing app | Flutter

PiaPiaBin
关注 关注
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
android嵌入flutter module实现
晨风的小窝
10-18 1446
android嵌入flutter module实现方法
Flutter 页面嵌入 Android原生 View
Lan_Se_Tian_Ma的博客
01-21 1880
文章主要讲解Flutter页面如何使用Android原生View,但用到了FlutterAndroid原生 相互通信知识,建议先看完这篇讲解通信的文章数据观察监听,Flutter使用ValueNotifier,Android原生使用LiveData,在实体数据发生改变时,自动刷新。
Flutter 之原生混合开发
最新发布
2401_85730375的博客
06-23 1019
小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!资料⬅专栏获取。
Android 集成flutter
lingd的专栏
03-23 1031
在已有Android原生工程基础上集成Flutter Module。 先说坑 新版flutter SDK已经移除了Flutter.java这个类。因此你想通过Flutter.createView(MainActivity.this,getLifecycle(),"yourRouter");来构建视图是行不通了。 具体步奏 1、使用Android Studio构建Module 创建mo...
android集成flutter
博客
10-28 205
1.如果开发中调用flutter没问题,但是打包后打开flutter页面报错,可能是签名有问题。 在proguard-rules.pro添加 -keep class io.flutter.facade.**{*;} -keep class io.flutter.plug.**{*;} -keep class io.flutter.app.** { *; } -keep class io.flutt...
Android笔记:在原生App中嵌入Flutter,逆袭面经分享
2401_84103216的博客
04-04 1010
都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
干货 | 携程APP Native/RN内嵌Flutter UI混合开发实践和探索
携程技术
10-28 2842
作者简介Deway,携程资深工程师,iOS客户端开发,热衷于大前端和动态化技术;Frank,携程高级工程师,关注移动端热门技术,安卓客户端开发。前言随着各种多端技术的蓬勃发展,如今的移动...
Flutter开发(二十八):Flutter_1.12与Android混合开发
wuqingsen1的博客
11-05 1431
1. Android 页面跳转到 Flutter 页面两种方式及传值 上一节看到无论跳转还是嵌入,速度都要一秒多,肉眼可见的慢,没有原生快很多。为了优化这个问题,flutter 提供了FlutterEngine 来进行预热/缓存,需要跳转的时候直接找到对应 id 进行跳转即可。 1. Android 页面跳转到 Flutter 页面两种方式及传值 前面一节说了两种方式: 第一种作为 fragment 嵌入到原生页面中; 第二种是作为一个新的页面 activity 跳转进入; 下面讲的是.
flutter嵌入原生组件_Flutter原生混合开发
weixin_42099987的博客
12-24 888
使用 Flutter 从头开始写一个 App是一件轻松惬意的事情。但是对于成熟产品来说,完全摒弃原有 App 的历史沉淀,全面转向 Flutter 并不现实。用 Flutter 去统一 iOS/Android 技术栈,把它作为已有原生 App 的扩展,然后通过逐步试验有序推进从而提升终端开发效率,可能才是现阶段 Flutter 最有效的集成方式。那么,Flutter 工程与原生工程该如何组织管理?...
Android 项目嵌入Flutter Module(二)
LsFern's Blog
09-26 446
前言 上篇文章我们讲的是Android 混合Flutter项目的一些基本用法和设计源码的分析。可以看到基本上实现了功能,但是在启动Flutter的时候会有短暂的白屏、黑屏的现象。这篇文章我们就围绕这个点去深入讨论一下 Android 项目嵌入Flutter Module(一) 正文 首先我们看下重现场景 以下内容均在启动模式为RenderMode.surface( RenderMode.texture后面会说到) 在分析Flutter Android端启动源码的时候,我们提到过FlutterActivit
Flutter原生混合开发
xiangzhihong8的专栏
11-07 1542
使用 Flutter 从头开始写一个 App是一件轻松惬意的事情。但是对于成熟产品来说,完全摒弃原有 App 的历史沉淀,全面转向 Flutter 并不现实。用 Flutter 去统一 iOS/Android 技术栈,把它作为已有原生 App 的扩展,然后通过逐步试验有序推进从而提升终端开发效率,可能才是现阶段 Flutter 最有效的集成方式。 那么,Flutter 工程与原生工程该如何组织管理...
symfony4-embedsocial-project
03-04
symfony4-embedsocial-project
FlutterBoost 实现Flutter页面内嵌iOS view
征战无悔人生
08-16 1601
Flutter 内嵌 iOS view
安卓项目嵌入flutter
caperxi的博客
03-09 507
https://flutter.cn/docs/development/add-to-app 第1步 在 Android Studio 打开现有的 Android 项目并点击菜单按钮 File > New > New Module… ,这样就可以创建出一个可以集成的新 Flutter 模块,或者选择导入已有的 Flutter 模块 问题:Android Studio 中没有找到flutter module 解决1:在settings 中找到plugins 下载flutter 插件 安装 解决2
Android笔记:在原生App中嵌入Flutterandroid面试问题
04-03 423
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
iOS原生嵌入Flutter
yes16ws的专栏
06-28 922
我们先创建NativeDemo ios工程然后,导入cocopad通过配置框架。
AndroidFlutter混合开发
2401_84132565的博客
04-08 810
window.defaultRouteName就是获取Android传递过来的参数,当Android端需要跳转多个flutter页面,通常这个用于路由分发,若需要的信息比较多的时候可以传递json字符串。注:window.defaultRouteName的导包为’dart:ui’,而不是’dart:html’。所谓的间接跳转其实就是通过继承FlutterActivity来实现的@Override@NonNull@Override。
原生Android项目中引入Flutter实现androidflutter 之间的通信
yyxhzdm的博客
12-20 2192
原生Android项目中引入Flutter实现androidflutter 之间的通信
Embedded-Project项目介绍
无人赴约
01-06 1181
项目的主要工程代码定义数据模型处理 URL 映射执行业务逻辑连接配置Django 项目的主要设置文件,其中包含了许多配置选项,例如数据库设置、静态文件设置、中间件配置等。在这里,你可以设置许多与服务器相关的选项。出现代表启动成功包含项目的源代码。存放静态资源文件,如图片、样式表等。存放 Vue 组件。存放页面级别的组件。存放路由配置文件。存放 Vuex 状态管理相关文件。出现代表前端启动成功。
写文章

最新文章

2021年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司嘉兴网站站内优化抚州市百度网站优化兰州模板seo网站优化服务溧阳市常州网站优化设计江门seo网站优化代理深圳公司网站优化在线推广行业网站优化过程标题优化网站牙科医院网站优化公司佛山网站优化咨询高淳区公司网站优化湘潭网站排名优化开发工具马鞍山网站优化机构浦东新区企业网站优化方案网站的优化方案网站快速优化只有火20星优化网站推广营销方案怎样优化网站的用户体验温江搜索网站优化渠道滨海网站优化费用常德网站关键词优化优化类网站织梦网站优化顺义网站建设优化推广江门企业网站关键词优化技巧网站标题优化可以写官网吗常州钟楼区网站优化官网网站优化怎么联系北京网站优化推广方案茂名网站关键词优化报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化