嵌入flutter,嵌入式软件培训机构

iOS flutter module打包发布报x86_64问题

通过module的形式将flutter嵌入已有的ios项目中后,打包发布时可能会遇到报 Flutter.framework包含了x86_64框架问题,出现这个问题基本是因为粗心。

成都创新互联公司为客户提供专业的成都网站制作、网站设计、程序、域名、空间一条龙服务,提供基于WEB的系统开发. 服务项目涵盖了网页设计、网站程序开发、WEB系统开发、微信二次开发、成都手机网站制作等网站方面业务。

怎么构建flutter module项目这里不提了,官方和网上博客都有。为了在已有的ios项目中嵌入flutter项目需要在ios项目中新建 Run Script Phase然后添加脚本:

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed

官方文档中明确写道 drag the new build phase to just after the Target Dependencies phase

网上其他相关博客基本也会有写这一点,意思是把新建的那个Run Script Phase拖到Target Dependencies phase下面,只有确保这个就不会有x86_64的问题。

当时遇到这个问题还研究了老半天,根据别人的博客还加了移除Flutter.framework中x86_64框架的脚本,然后我加了这个脚本也是没有效果,没有效果的原因也是这个顺序的问题,同样的拖到Target Dependencies phase下面也是会生效的(顺序对的话就不需要额外添加移除x86_64的脚本)。

当时构建项目的时候看到说要拖到Target Dependencies phase下面,我理解的是新建的要在Target Dependencies phase下面而不能在它上面,然后新建一个Run Script Phase默认就是在最下面所有也就没管了,但是其实这个顺序是有讲究的,分先后执行,其他脚本都执行完了,项目都已经打包好了,你最后再去执行脚本处理Flutter.framework当然是没有效果的

所以还是要有一个严谨的态度,不要太随意

Flutter(六)Android与Flutter混合开发(Hybird)

如果我们目前的项目是Android的,但是接下来我们希望部分页面可以使用Flutter进行开发,甚至我们希望在Native页面中嵌入FlutterUI组件,那么我们该如何实现呢?

假设你现在Android项目的目录的结构是这样的

这时候如果你想创建一个Flutter模块,使得Android模块和Flutter模块之间可以进行交互,我们可以通过Android Studio新建一个Flutter Module,具体过程是:File — New — New Module ,之后选择Flutter Module,指定Project Location的路径为

也就是说,最终你的项目结构会是这样的

接下来在Android Module的 build.gradle 文件中添加flutter依赖

先创建一个Flutter页面

这里比较重要的是 window.defaultRouteName 这个字段,这个字段可以接收从Native传递过来的参数 (下文我们会介绍原生传递参数的方法),也就是说通过这个字段我们就可以进行Flutter页面的路由的分发

我们可以直接在Android的 MainActivity 中启动一个 FlutterActivity ,这里的 initialRoute 方法中传递的参数就对应Flutter层的 window.defaultRouteName

注意:需要在 AndroidManifest.xml 注册 FlutterActivity

自己创建一个 FlutterAppActivity 继承自 FlutterActivity

在 MainActivity 中启动 FlutterAppActivity (另外别忘了在 AndroidManifest.xml 中注册 FlutterAppActivity )

两种启动方式的区别

如果单纯只是想打开一个Flutter页面,两种方式实际上基本没有太大区别,第一种方式也许还会更简单一点。但是,在Flutter开发中,我们往往还需要开发一些Native插件供Flutter调用,如果使用复写 FlutterActivity 的方式更有利于我们在 FlutterActivity 中注册我们的Native插件,所以实际开发中一般推荐使用第二种方式

扩展思考

initialRoute 从名称上看起来是Flutter提供给我们进行Native与Flutter交互的路由跳转的,但是实际上他就是一个字符串,我们不仅仅可以传递一个路由名称,有时候我们也可以通过这个参数传递一串JSON数据,然后在Flutter端进行解析,这样我们就可以通过这个参数做更多的事情

activity_main.xml

FrameLayout 用于承载Flutter组件

MainActivity.java

使用 FragmentManager 将 FlutterFragment 添加到 FrameLayout 容器中

运行结果

上半部分是原生的TextView,下半部分是Flutter的Text组件

本节主要介绍了Native和Flutter之间的页面跳转,以及同一个页面中Native与Flutter组件的组合。接下来会介绍如何编写Android插件与Flutter进行数据交互

Flutter嵌入原生OC页面

1、创建MyFlutterView继承NSObject并遵守FlutterPlatformView协议

2、实现自定义初始化方法,并实现 FlutterPlatformView协议方法

Flutter开发——Linux嵌入式应用开发

上文中 介绍了Linux平台下Flutter环境搭建和桌面应用开发,现在需要更深入了解如何将该应用运行在Linux系统的嵌入式设备上。

安装及示例

在 ~/.bashrc 中配置 export PATH=$PATH:/opt/flutter-elinux/bin

打开weston虚拟机,此时发现 flutter-elinux devices 连接设备变成两个,如下图

即可编译及运行基于wayland显示后端的demo

避坑

ios原生嵌套Flutter模块

通过以下命令解决

执行完毕后,Flutter module将会创建在ios项目/my_flutter目录下

将Flutter模块嵌入到现有iOS应用程序中有两种方式:

此方法需要所有的相关开发的人员安装 Flutter 环境。

需要在my_flutter文件夹下执行一下

把.ios和.android等flutter配置生成出来。

AppDelegate.h:

AppDelegate.m:

控制器:

flutter:

注册路由

通过全局FlutterEngine实例化FlutterViewController,并setInitialRoute设置初始化路由,这里发现设置的初始化路由路由并不管用

控制器:

设置FlutterViewController的pushRoute

这里其实只是让flutter方面push一次

新建一个FlutterViewController并把setInitialRoute设置为跳转的路由,不通过全局的FlutterEngine创建

放一个之前自己学习时写的demo,希望可以帮助新入门的老铁们,有好的建议可以提一下,我们一起进步,奥利给!!!

Flutter简介

为什么我们要选择flutter语言呢?它有哪些优点呢?

*1.flutter将会帮你更容易,更快速的开发出界面美观的移动应用。

*2.是谷歌的亲儿子

*3.支持热重载 :android原生开发会遇到编译-打包-安装三个步骤。开发效率迟迟得不到提升。热重载技术在flutter内完美体现。

*4.支持垮平台:flutter基于图像回执引擎进行渲染,在不同平台下绘制效果绝对是一致的,能做到真正的跨平台,一处写,处处运行。

*5.性能优异性:不同于H5通过DOM渲染和RN映射组件,flutter直接基于native进行绘制。性能上完全超过原生。

*1.Dart语法编译:Dart是一种强类型、跨平台的客户端开发语言。具有专门为客户端优化、高生产力、快速高效、可移植易学的风格。Dart主要由谷歌负责开发和维护。

*2.Flutter插件:Flutter使用的Dart语言无法直接调用iOS系统提供的OC或swift接口,这时就需要使用插件来实现中转。Flutter官方提供了丰富的原生接口封装

Flutter分为三大部分

*1.由Dart语言负责的Framwork层。

*2.Dart语法执行器。

*3.Skia图像处理引擎。05年就被研发成功了(谷歌的全家桶都是由谷歌的Skia图像处理引擎绘制的,iOS目前的图像处理引擎是JPEG,其中Skia是对JPEG的二次封装。)

*1.2005年Skia图像处理引擎成立,用来展示Chrome,火狐和其他谷歌自己的产品使用。

*2.2007年第一个安卓系统问世,于是谷歌开发者将Skia移植到安卓平台。

*3.Skia作为一个2D的图像系统,包含绘制,渲染,显示图片都是Skia完成。安卓中的3D部分是由OpenGLES来实现的,其中OpenGL ES是OpenGL的嵌入式版本。


网站名称:嵌入flutter,嵌入式软件培训机构
当前URL:http://abwzjs.com/article/hogegh.html