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那边的设备信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带文字的短视频:成都鼎茂宏升文化传媒公司

带文字的短视频&#xff1a;视觉与文字的交织艺术 在信息爆炸的时代&#xff0c;短视频以其直观、生动的视觉呈现方式&#xff0c;迅速成为人们获取信息、娱乐休闲的重要渠道。然而&#xff0c;随着人们对内容深度和质量要求的提升&#xff0c;成都鼎茂宏升文化传媒公司单纯的…

项目4 移动电商运维自动化

项目引入 在一次移动电商系统发布更新上&#xff0c;由于我的不小心&#xff0c;错误地删除了生产服务器上的执行代码&#xff0c;导致整个移动电商系统页面都无法访问&#xff0c;最后花很长时间才恢复&#xff0c;这次事故给公司带来了不小的麻烦。 Philip组织整个运维团队进…

多屏多机同控!天途首发瑶光智控地面站

瑶光智控地面站全新发布&#xff01;高性能处理器&#xff0c;高亮三屏显示。内置天途云控系统&#xff0c;融合图传、控制、存储和数据处理等功能与一体&#xff0c;强大算力&#xff0c;高度集成无人机、无人船、无人车和机械狗等多种无人装备进行云控云算。 内置4G公网通讯模…

如何判断NP-hard问题

关键概念回顾 1、P类问题&#xff1a;可以在多项式时间内解决的问题。 2、NP类问题&#xff1a;解可以在多项式时间内验证的问题。NP类问题不一定能在多项式时间内解决&#xff0c;但其解一旦给出&#xff0c;可以在多项式时间内验证。 3、NP-hard问题&#xff1a;任意一个N…

LabVIEW调用外部DLL(动态链接库)

LabVIEW调用外部DLL&#xff08;动态链接库&#xff09; LabVIEW调用外部DLL&#xff08;动态链接库&#xff09;可以扩展其功能&#xff0c;使用外部库实现复杂计算、硬件控制等任务。通过调用节点&#xff08;Call Library Function Node&#xff09;配置DLL路径、函数名称和…

Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作[Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解]还在写0.0… 文章目录 系…

漫威Vision Pro沉浸式互动应用上线,引发行业内外对新型漫画模式的热烈讨论

近日,备受瞩目的漫威Vision Pro沉浸式互动应用正式与全球粉丝见面,这一创新尝试立即在行业内引起了广泛关注和热烈讨论。这款应用不仅融合了视频和轻游戏的元素,更被业内人士形象地称为“交互式沉浸式漫画”,为漫画爱好者带来全新的阅读体验。 在Vision Pro中,用户能够沉…

代码随想录算法训练营day39 | 738.单调递增的数字、968.监控二叉树

738.单调递增的数字 暴力解法超时 贪心解法&#xff1a;从后向前遍历&#xff0c;如果出现strNum[i - 1] > strNum[i]的情况&#xff08;非单调递增&#xff09;&#xff0c;让strNum[i - 1]--&#xff0c;然后strNum[i]给为9 class Solution:def monotoneIncreasingDigi…

道歉性质的《情况说明》应如何写,才能赢得对方的谅解?

道歉性质的《情况说明》应如何写&#xff0c;才能赢得对方的谅解&#xff1f; ——从“成都地铁被诬陷偷拍案”两涉事女的《情况说明》中想到了什么&#xff1f; 据九派新闻报道&#xff0c;在“成都地铁被诬陷偷拍案”中&#xff0c;近日两名当事女子罗某某和曾某某首次公开回…

网关(GateWay)- 快速使用

引入依赖 <!-- gateway --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency> 路由配置 server:port: 8088 spring:application:name: api-gatew…

零基础学会asp.net做网站/公众号/小程序之三:实战初体验(简单程序教学)

关注我&#xff0c;持续分享逻辑思维&管理思维&面试题&#xff1b; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导&#xff1b; 博主在互联网大厂深耕近二十年&#xff0c;从一线码农做起&#xff0c;到人工智能公司副总裁。希望把过往经验总结出来&#xff0…

Flutter 中的 SliverFixedExtentList 小部件:全面指南

Flutter 中的 SliverFixedExtentList 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;SliverFixedExtentList 是一个高效…

简述:ES6中Generator函数与yield关键字

ES6&#xff1a;Generator 函数 与 yield 关键字 一、Generator 函数 与 yield 引入 语法上&#xff1a;首先可以把它理解成&#xff0c;Generator 函数是一个状态机&#xff0c;封装了多个内部状态。 执行 Generator 函数会返回一个遍历器对象&#xff0c;也就是说&#xff0…

MySQL 命令总结篇-思维导图

一些常用命令以思维导图形式总结在这里了&#xff0c;掌握这些进行MySQL基本操作绝对没问题&#xff0c;加油&#xff01;友友们可以根据这些思维导图进行知识总结。 目录 一、快速上手 二、SQL 语句分类&#xff08;DDL、DML、DQL、DCL&#xff09; 三、数据类型 四、约束…

探索AI去衣技术中的反射应用

在当今数字时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的飞速发展已经渗透到了我们生活的方方面面。其中&#xff0c;图像处理和计算机视觉作为AI的重要分支&#xff0c;正不断推动着创新应用的边界。今天&#xff0c;我们要探讨的是一个颇具争议但又技术上颇为有…

MySQL相关知识点梳理

一、MySQL架构 连接层&#xff1a;处理连接&#xff0c;身份验证等。核心服务层&#xff1a;包含权限判断、查询缓存、解析器、查询优化器、执行引擎等。存储引擎层&#xff1a;负责管理数据的底层组件&#xff0c;定义了如何存储、索引和检索数据。数据存储层&#xff1a;与文…

[Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解

目录 0.子序列 vs 子数组1.最长递增子序列1.题目链接2.算法原理详解3.代码实现 2.摆动序列1.题目链接2.题目链接3.代码实现 0.子序列 vs 子数组 子序列&#xff1a; 相对顺序是跟源字符串/数组是一致的但是元素和元素之间&#xff0c;在源字符串/数组中可以是不连续的一般时间…

金融行业数字化上云及信创改造过程中的一些问题及解决方案|合集①

Q&#xff1a;对金融机构来讲&#xff0c;什么是一切业务运行的前提&#xff1f; 金融机构的业务连续性对系统的稳定性要求极高。任何系统故障都可能导致严重的业务中断和经济损失。因此&#xff0c;金融机构需要IT基础架构能够提供高稳定性的服务&#xff0c;确保业务的连续运…

我的名字叫大数据

第1章 大家好,我叫大数据 1.1 我的家族传统:从我小小的祖先到壮大的我 1.1.1 最初的我:原始部落里的计数石头 大家好,我是你们人类文明的“老朋友”——大数据。你们知道吗?在我还没有变成你们手机、电脑里飞速跑动的那些数字前,我最初的模样可是一块块“计数石头”。…

Android Display Graphics #1 整体框架介绍一

软件基础 Android的framework层提供了一系列的图像渲染API&#xff0c;可绘制2D和3D。简单理解就是上层开发APP的小伙伴提供了接口&#xff0c;开发者可以直接显示对应的自己内容。但如果掌握了Display底层逻辑再写上层app&#xff0c;会有掌控力&#xff0c;出问题可以根据lo…