当前位置: 首页 > news >正文

AndroidFlutter混合开发

为什么要有混合开发

我们知道,Flutter是可以做跨平台开发的,即一份Flutter的Dart代码,可以编译到多个平台上运行。这么做的好处就是,在不降低多少性能的情况下,尽最大可能的节省开发的时间成本,直接将开发的时间总成本缩短了快一半,而且测试也比较轻松,通常情况下,在一端能正常运行,在另外的端也不会有太大问题,不会出现由于开发水平不一致导致的,版本功能没有对齐的尴尬局面。然而完全的跨平台开发,在某些对性能要求极高的场景表现则不尽人意,特别是Android的低端机上。那么有没有一种方案,既能保留跨平台开发高效的优点,又能在特定的功能上充分发挥原生的优势呢?如果没有,我就不会在这里扯淡了。这个完美的解决方案就是混合开发。

什么是混合开发

混合开发简单来说就是,既有Flutter的Dart代码,又有平台相关的原生代码,如Kotlin、Swift。在改动比较小,且追求极致体验的主要功能模块,采用原生开发,搭建一个所谓的“壳”。然后在一些经常变动的界面,如应用的首页、活动页面,以及简单的UI界面,如设置界面、关于界面,使用Flutter进行开发。这样做的好处就是可以降低错误率,提高开发效率,缩减开发周期,提升产品竞争力和快速抢占市场的能力。

混合开发长啥样

101_1689005573.gif
使用Flutter进行混合开发的app,性能不比原生差多少。而且在比较难的领域,只需要攻克Flutter端的代码,就可以。如Web3,不是说它有多难,主要是比较前沿,会的人相对来说较少。

开始集成Flutter模块到Android端

由于本人水平有限,我这里只介绍Android端的混合开发。我这里默认你已经掌握了Flutter的跨平台开发。如果没有这个基础的同学,可以看我Flutter专栏的其他文章。

  1. 创建项目
    截屏2023-07-02 19.57.57.png
    你要先创建一个android app原生工程。然后在原生工程的里面再创建一个Flutter的模块项目。特别注意的是,Project type从Application改为Module,直接以模块的方式进行依赖和编译。Platforms至少选择Android,调试可能会用到Web,更方便。
  2. Flutter模块的gradle配置
    在settings.gradle中加入以下代码。
    setBinding(new Binding([gradle: this])) 
    evaluate(new File( settingsDir,'flutter_lib/.android/include_flutter.groovy')) 
    include ':flutter_lib'
    
    然后加入以下代码。
    dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)repositories { google() mavenCentral()maven { allowInsecureProtocol = trueurl "http://download.flutter.io" } }
    }
    
    注意将FAIL_ON_PROJECT_REPOS改为PREFER_SETTINGS。
    如果为Gradle8.x,加入namespace,8.x之前使用applicationId。在flutter_lib->.android->Flutter->build.gradle中加入以下代码。
        android {namespace 'com.example.flutter_lib'}
    
    命名空间可以自己定义。
  3. 在app模块中依赖该flutter模块,跟依赖普通的android模块一样。
        dependencies {implementation project(':flutter')}
    
  4. 在app模块的AndroidManifest.xml清单文件中注册FlutterActivity。
        <application> <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" /> </application>
    
    如果你有使用我的1.1版本以上的dora框架[https://github.com/dora4/dora] ,则这一步略过。
  5. 打开Flutter插件的入口Activity。
        val intent = FlutterActivity .withNewEngine() .initialRoute("home") .build(this)startActivity(intent) 
    

后续

你还可以将插件的UI风格设计得跟原生的壳一样,然后封装好常用的原生的功能,使用Flutter的MethodChannel进行通信,提供给Flutter层进行调用。如打开原生的WebView,弹出原生的对话框,获取系统状态栏的高度等。另外Flutter模块项目,就不要依赖一些跨平台的库了,如deviceinfo,在Android这边没法获取到iOS那边的设备信息。

相关文章:

AndroidFlutter混合开发

为什么要有混合开发 我们知道&#xff0c;Flutter是可以做跨平台开发的&#xff0c;即一份Flutter的Dart代码&#xff0c;可以编译到多个平台上运行。这么做的好处就是&#xff0c;在不降低多少性能的情况下&#xff0c;尽最大可能的节省开发的时间成本&#xff0c;直接将开发…...

Halcon 光度立体 缺陷检测

一、概述 halcon——缺陷检测常用方法总结&#xff08;光度立体&#xff09; - 唯有自己强大 - 博客园 (cnblogs.com) 上周去了康耐视的新品发布会&#xff0c;我真的感觉压力山大&#xff0c;因为VM可以实现现在项目中的80% 的功能&#xff0c;感觉自己的不久就要失业了。同时…...

关于找暑期实习后的一些反思

日期 2024年6月3日 写在前面&#xff1a;距离研究生毕业还有9个月&#xff0c;前端时间一直在不停地投简历&#xff0c;不停地刷笔试题&#xff0c;不停地被拒绝&#xff0c;今天悬着的心终于死透了&#xff0c;心情还是比较糟糕的&#xff0c;可能唯一的安慰就是一篇小论文终于…...

Rust struct

Rust struct 1.实例化需要初始化全部成员变量2.如果需要实例化对象可变&#xff0c;加上mut则所有成员变量均可变 Rust支持通过已实例化的对象&#xff0c;赋值给未赋值的对象的成员变量 #![allow(warnings)] use std::io; use std::error::Error; use std::boxed::Box; use s…...

【UE5:CesiumForUnreal】——加载无高度地形数据

目录 1.实现目的 2.数据准备 2.1下载数据 2.2 数据切片 3.加载无地形数据 1.实现目的 在CesiumForUnreal插件中&#xff0c;我们加载地图和地形图层之后&#xff0c;默认都是加载的带有高程信息的地形数据&#xff0c;在实际的项目和开发中&#xff0c;有时候我们需要加载无…...

证件/文书类日期中文大写js/ts插件

说明 证件/文书类落款日期中文大写往往会将“零”写作“〇”&#xff0c;而数字依然使用简体“一二三”&#xff0c;而不是“壹贰叁”。 如下&#xff1a; 针对这一点&#xff0c;写了如下转换插件。 代码 function DateToUpperCase(date: Date new Date()) {const chStr …...

03JAVA基础(方法/类/封装(构造方法))

目录 1.方法 1.1 方法的定义 1.2 方法的重载 2.类和对象 3.封装 1. private关键字 2. this关键字 3. 封装 4. 构造方法 1.方法 含义: 将具有独立功能的代码块组织成一个整体,具有特殊功能的代码集 注意: 方法必须先创建才可以使用,需要手动调用执行 1.1 方法的定义 格…...

数据容器的通用操作、字符串大小比较 总结完毕!

1.数据容器的通用操作 1&#xff09;五类数据容器是否都支持while循环/for循环 五类数据容器都支持for循环遍历 列表、元组、字符串都支持while循环&#xff0c;集合、字典不支持&#xff08;无法下标索引&#xff09; 尽管遍历的形式不同&#xff0c;但都支持遍历操作 2&a…...

KAN(Kolmogorov-Arnold Network)的理解 3

系列文章目录 第一部分 KAN的理解——数学背景 第二部分 KAN的理解——网络结构 第三部分 KAN的实践——第一个例程 文章目录 系列文章目录前言KAN 的第一个例程 get started 前言 这里记录我对于KAN的探索过程&#xff0c;每次会尝试理解解释一部分问题。欢迎大家和我一起讨…...

lux和ffmpeg进行下载各大主流自媒体平台视频

1、lux下载&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1WjGbouL3KFTU6LeqZmACpA?pwdagpp 提取码&#xff1a;agpp 2、ffmpeg下载&#xff0c;跟lux放在同一个目录&#xff1b; 3、为lux、ffmpeg设置环境变量&#xff1b; 4、WINR&#xff0c;打开运行&#xff0…...

day25-XML

1.xml 1.1概述【理解】 1.2语法规则【应用】 1.5DTD约束【理解】 1.6schema约束【理解】 1.4xml解析【应用】 概述 xml解析就是从xml中获取到数据 常见的解析思想 DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。 会把xml文件全部加载到…...

Mixly 开启WIFI AP UDP收发数据

一、开发环境 软件&#xff1a;Mixly 2.0在线版 硬件&#xff1a;ESP32-C3&#xff08;立创实战派&#xff09; 固件&#xff1a;ESP32C3 Generic(UART) 测试工工具&#xff1a;NetAssist V5.0.1 二、实现功能 ESP32开启WIFI AP&#xff0c;打印接入点IP地址&#xff0c;允许…...

OCR图片转Excel表格:没结构化的弊端

随着OCR技术的不断发展&#xff0c;将表格图片转为excel已不再是难题&#xff0c;但是&#xff0c;目前市面上的程序还大多处于仅能将图片表格转为普通的excel格式阶段&#xff0c;而不能将其结构化&#xff0c;这样就会产生许多的弊端&#xff0c;具体弊端如下&#xff1a; &l…...

查看所用数据库的版本

通过查询 SELECT VERSION();...

U盘感染病毒,不必急于扔掉!教你如何有效清除U盘中的病毒

U盘被感染了只能扔掉吗&#xff1f;随着信息时代的飞速发展&#xff0c;U盘已成为我们日常生活中不可或缺的存储设备。然而&#xff0c;在使用U盘的过程中&#xff0c;我们有时会遇到U盘被病毒感染的情况。面对这一问题&#xff0c;许多人可能会感到恐慌&#xff0c;甚至想要直…...

新手小白也能玩转跨境电商:从零到精通的操作流程

随着全球化的浪潮愈演愈烈&#xff0c;跨境电商已成为众多创业者和企业家的瞩目焦点。然而&#xff0c;对于初涉此领域的新手来说&#xff0c;从零开始构建跨境电商业务可能会面临诸多挑战。本文将为您梳理跨境电商运营的基本操作流程&#xff0c;并指引新手小白如何迈出坚实的…...

川北医学院与爱尔眼科医院集团签署战略合作协议共谋医学发展新篇章

为深入贯彻落实党的二十大精神&#xff0c;统筹校、企、医、政多方资源&#xff0c;服务“健康中国”战略&#xff0c;推动眼健康产业发展&#xff0c;打造国家及区域级眼科医学中心&#xff0c;2024年5月31日&#xff0c;川北医学院与爱尔眼科医院集团在成都举行战略合作协议签…...

利用映射算子打印菱形

文章目录 一、利用RDD完成&#xff08;一&#xff09;右半菱形&#xff08;二&#xff09;左半菱形&#xff08;三&#xff09;完整菱形&#xff08;四&#xff09;输出任意大菱形 二、利用Java完成&#xff08;一&#xff09;右半菱形&#xff08;二&#xff09;左半菱形&…...

亚信安全正式推出5G专网安全测试服务 圆满完成核电客户5G项目落地

近日&#xff0c;亚信安全联合北京触点互动信息技术有限公司成功完成某核电客户5G专网项目&#xff0c;从终端安全&#xff0c;基站&#xff0c;核心网网元&#xff0c;切片安全以及接口安全等重点存在安全风险点进行测试&#xff0c;发现潜藏的安全隐患漏洞&#xff0c;为客户…...

第二十五章CSS中的技巧(导航栏、下拉列表)

1.CSS精灵 1.什么是CSS精灵 英文叫法 CSS sprites&#xff0c;通常被解释为“CSS图像拼合”或“CSS贴图定位”;其实就是把网页中一些背景图片整合到一张图片文件中&#xff0c;再利用css“background-image”&#xff0c; “background-repeat”,“background-position”的组…...

【机器人】ROS2配置solidworks模型转换的URDF文件

&#x1f647;‍♀ 安装solidworks_urdf插件 地址 在添加过点和坐标系后&#xff0c;点击工具->tools(在最下面) 如何转为URDF请看这个视频点击 ☕ 为ROS2配置 安装相关依赖 sudo apt install ros-humble-joint-state-publisher-gui sudo apt install ros-humble-xacro…...

外链引流抓取技巧

关键项核心解释核心目标利用外部网站的超链接&#xff0c;将搜索引擎的爬虫&#xff08;蜘蛛&#xff09;吸引至目标网站&#xff0c;以促进页面发现、抓取与收录。基本机制1. 蜘蛛发现新路径&#xff1a;搜索引擎蜘蛛在遍历互联网时&#xff0c;通过页面上的链接发现新的URL。…...

从宿主机(Windows)通过 NAT 模式连接虚拟机(Ubuntu)中的 MySQL

宿主机&#xff08;NAT 模式&#xff09;连接虚拟机 MySQL 完整记录环境&#xff1a;Windows 宿主机 VMware Workstation&#xff08;Ubuntu 虚拟机&#xff0c;NAT 网络&#xff09; 目标&#xff1a;从宿主机通过本地网络连接虚拟机内的 MySQL&#xff0c;并允许 Java 等程序…...

石大胜华冲刺港股:年营收68亿 亏588万 郭天明控制22%股权

雷递网 雷建平 4月5日石大胜华新材料集团股份有限公司&#xff08;简称&#xff1a;“石大胜华”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。石大胜华已在A股上市&#xff0c;截至周五收盘&#xff0c;石大胜华股价为80.75元&#xff0c;市值为188亿元。一旦在港…...

MySQL后端开发核心知识点

一、存储引擎&#xff08;只重点 InnoDB&#xff09;MySQL 5.5 以后默认引擎是 InnoDB&#xff0c;也是现代企业项目唯一使用的引擎。InnoDB 特点&#xff1a;支持 事务支持 行级锁&#xff0c;并发性能好支持 外键&#xff08;实际开发基本不用&#xff09;基于 B 树索引结构依…...

Perl环境变量设置全攻略:从银河麒麟V10到CentOS的通用配置方法

Perl环境变量跨平台配置实战指南 在混合云和异构系统环境中&#xff0c;Perl作为系统管理和应用开发的重要工具&#xff0c;其环境配置的一致性直接影响脚本的跨平台运行能力。本文将深入探讨从银河麒麟V10到CentOS等主流Linux发行版的Perl环境变量配置方法论&#xff0c;帮助运…...

实战指南,基于快马平台快速构建用于工业质检的yolo缺陷检测系统

今天想和大家分享一个很实用的工业质检项目实战经验——基于YOLO模型快速搭建零件缺陷检测系统。这个项目特别适合需要快速验证算法效果的场景&#xff0c;我在InsCode(快马)平台上只用半天就完成了从原型到部署的全流程。 项目背景与需求分析 工业质检对精度和实时性要求很高&…...

新手入门指南:基于快马生成代码学习注册表单开发与验证

新手入门指南&#xff1a;基于快马生成代码学习注册表单开发与验证 作为一个前端新手&#xff0c;我最近在学习如何开发一个完整的注册表单页面。正好用InsCode(快马)平台尝试实现了一个谷歌风格的账号注册页面&#xff0c;整个过程收获很大&#xff0c;下面分享我的学习心得。…...

OpenClaw语音交互方案:千问3.5-27B对接Whisper实现听写

OpenClaw语音交互方案&#xff1a;千问3.5-27B对接Whisper实现听写 1. 为什么需要语音交互自动化 上个月帮朋友整理一场3小时的行业访谈录音时&#xff0c;我对着逐字稿反复暂停播放、标记重点、提炼观点&#xff0c;整整花了6小时才完成笔记。这种机械劳动让我开始思考&…...

2025届必备的六大降重复率助手横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 纵然人工智能辅助毕业论文写作现如今已然成为一种学术方面的新常态&#xff0c;可是却需要去…...