Flutter 48: 图解 Android 原生集成 Flutter Module
小菜接触了 Flutter 一段时间,但与原生交互方面还未曾接触,今天根据 官方文档 学习一下 Android 原生如何集成最基本的 Flutter Module;
集成方式
1. 新建 Android Project
小菜为了测试方便,新建一个 Android Project,本地路径为 ../ACE_Android/ACE_Demo01;
2. 新建 Flutter Module
2.1 命令行方式
小菜首先采用如下命令行新建一个 Flutter Module,此时本地路径为 ../ACE_Android 与 ACE_Demo01 同级;
flutter create -t module my_flutter
2.2 AndroidStudio 工具方式
小菜也用 AndroidStudio 尝试,同样简单便利;File -> New -> New Flutter Project -> Flutter Module;
3. Android Project 中添加依赖
3.1 手动引入
- 在 setting.gradle 中加入 Flutter 的引入;
include ':app' //加入下面配置 setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir.parentFile, 'my_flutter/.android/include_flutter.groovy' ))
- 在 app/build.project 中添加 Flutter 依赖;
implementation project(':flutter')
3.2 AndroidStudio 工具引入
可采用 Flie -> Sync Project with Grdle Files 时,可通过 Import Flutter Module 方式引入;此时若报 The Gradle files could not be updated automatically 则需要手动 3.1 操作;
4. 原生与 Flutter 交互
Android 引用 Flutter 通常是两种,一种是新建一个 View 用来展示 Flutter 页面,另一种是 Fragment;其本质还是将 Flutter View 作为 Android View 的子 View 展示;
小菜新建一个无标题栏的 FlutterActivity 和一个 FlutterFragment,在 MainActivity 添加一个按钮跳转到 FlutterActivity 展示 FlutterFragment;
public class FlutterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_flutter); getSupportFragmentManager().beginTransaction() .replace(R.id.container, new FlutterFragment()) .commit(); } } public class FlutterFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); getActivity().getSupportFragmentManager() .beginTransaction() .add(R.id.container, Flutter.createFragment("/")) .addToBackStack("flFlutter.createFragmentutter") .commit(); return rootView; } }
通过 Flutter.createFragment("/") 设置跳转路由;
5. 签名打包
小菜直接运行 debuge 模式一切正常,只是在跳转 Flutter 时不如直接跳转原生流畅,后期优化;而打包成 release 包与 Android 原生相同,无需特别处理 Flutter Module;
注意事项
1. minSdkVersion >= 16
小菜在集成过程中,使用 Flutter 时会提示 SDK 最低版本在 16 以上,需注意;
2. Flutter Module 路径
小菜在学习过程中,无论是命令行创建还是 AndroidStudio 工具创建 Flutter Module 路径并非一定要与 Android Project 同级,关键是 setting.gradle 路径配置;
new File 文件第一个参数 settingsDir.parentFile 即 Android Project 所在文件路径,第二个参数为 Flutter Module 中 .groovy 路径;我们可以使用只有一个参数的完整路径;
// 两个参数 evaluate(new File( settingsDir.parentFile, 'my_flutter/.android/include_flutter.groovy' )) // 一个参数 evaluate(new File( '/Users/user/Documents/workspace/ACE_Flutter/flutter_module01/flutter_module01/.android/include_flutter.groovy' ))
3. 新的 evalute 会覆盖上一个
小菜测试是,在 setting.gradle 中引入多个 evalue,以为可以同时引入多个 Flutter Module,而实际是后面的引入会覆盖先前的引入,以最后一个 evalue module 为准;
小菜对 Android 与 Flutter 交互接触较少,需进一步学习;如有错误请多多指导!
来源:阿策小和尚
欢迎闲来吐槽~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
6年iOS开发被裁员,是行业的饱和还是经验根本不值钱?
前言: 最近看到很多iOS开发由于公司裁员而需要重新求职的。他们普遍具有4年甚至更长的工作经验。但求职结果往往都不太理想。 我在与部分iOS开发者交谈的过程中发现,很多人的工作思路不清晰,技能不扎实,没有持续学习的习惯,但对于未来的预期都很高。 由于工作年限较长,他们普遍认为工资就是应该随着工作年限增长而不断提升的。但事实却是:你的工资不是和你的工作年限成正比,而是和你的不可替代性成正比。 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长! 一, 在公司,你是无可替代还是可有可无 我的一个iOS开发朋友,大学毕业后进入一家企业做iOS开发。 1,6年前,他刚入职那会儿,公司效益非常不错。 刚入职时他对工作充满好奇,他本身就是科班出身,为了能尽快熟悉公司业务,他白天跟着 Team Leader 学习工作流程,晚上回家拼命看书,恶补 iOS底层相关知识。 他人很机灵,项目组的前辈们也愿意点拨他,所以,他手很快。, 2,工作的第二年,他对自身项...
- 下一篇
云栖科技评论91期:智能时代上半场结束,下半场开始
点击订阅《云栖科技评论期刊》 【卷首语】智能时代上半场结束,下半场开始 2019年刚刚开始,微软公司公开表示,任何使用其Windows 10手机(曾被称为Windows Phone)的用户,都应该转而使用iPhone或Android手机。 这并不是突然的决定,微软最后一次公开强调移动优先战略恐怕要追溯到2014年,“移动优先和云优先”的口号也早已被“云和智能边缘优先”的战略所取代,Windows Phone虽然“与时俱进”地改名为Windows 10手机,但最终的命运也难逃“2019年12月10日之后,微软将不会继续对Windows 10(移动操作系统)进行技术支持”。 2019年,离微软推出独创的移动操作系统MeeGO已近10年,收购诺基亚移动部门也过去了近6年,但最终时间只是证明了微软在移动业务上败给了苹果的iOS和
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6