Android高级之第十一讲Hybird开发

2023-11-22 16:40

本文主要是介绍Android高级之第十一讲Hybird开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处!

随着移动端应用平台的兴起,需求和交互方式的多样化,H5开发逐渐在移动端流行起来;常见的移动产品有Web App(纯H5)、混合型App(Native+h5)、原生App(Native),然而自移动端兴起之日起,混合型产品即被产品经理大力推崇,方便更新、先上线再补发等特点,相比Native端的线上功能不可随意改动、出问题不能及时发布版本更新要排期等特点,H5还是很实用的。只需要前期制定好规则,增强扩展性,之后相当于增加若干功能模块。目测中国联通的产品大半是纯H5开发的,非常流畅,使用方便;淘宝集成天猫、去啊、外卖、聚划算等,仅在支付时调用淘宝支付功能;而H5使用的js、css等可以放到本地,而且无论Android还是苹果端均可使用,有效降低开发成本。

跨平台技术要求:开发效率和UI一致性、性能佳体验好、动态更新。


主流三种:Web技术(依赖WebView的Cordova等)、原生渲染(JS利用中间层生产原生控件的Weex、ReactNative等)、自渲染(利用Skia的Flutter等)

目前Android上常用底层技术方案有两种,一种通过页面加载完执行js方法传值,或者调用-刷新-执行,方法少功能也比较鸡肋,另一种使用webJsInterface(4.2版本以上,主要为H5端提供数据)的方式+shouldOverrideUrlLoading(接收H5端的事件驱动)监听页面动作,由WebViewProvider接口去执行,提供一个注册对象给H5端,调用我方提供的方法即可,交互非常方便;更复杂的功能,比如交互使用js,基本上把内部WebView变成跟浏览器一样强大的功能,为节省时间,还需要使用一些框架加以修改来完成自己的工作,以下介绍几种:

Cordova,几乎所有框架都基于它开发,主要提供使用js方法调用本地摄像头、麦克风等,对调用方法以及WebView相关功能进行再次封装,并且可以设置某些产品才能使用此框架的白名单,通过消息来记录页面生命周期和执行JS方法,跟移动端App的管理方式非常类似 。主要完成本地网页的加载,拓展也可以加载站网页,并调用本地手机功能,但Web端开发成本升高,可能会导致某些功能不可用,所以需要平衡使用。

UniApp,是一个使用 Vue.js 开发的大前端应用框架,编写一套代码,可发布到iOS、Android、H5、以及微信/支付宝/百度/头条/QQ/钉钉/淘宝小程序,和快应用等多个平台。使用自己的开发工具:HBuilderX,背靠接入移动端各种接口,以及众多插件库,在大前端技术栈上,占有一席之地。

Hummer,是滴滴开源的,使用 JS引擎(Android端的QuickJS,iOS端的JavaScriptCore),作为JS和客户端之间的桥梁,通过JS代码来调用到原生的组件和方法,相当于在原生代码上加一层代理,实现相关功能;同时利用 Flex布局引擎 来渲染页面。通过自研MVVM架构的开发框架 —— Tenon,可以把使用 Vue.js 编写的代码,转换成原生 Hummer 的代码。因此,Hummer 实际上同时支持两种开发模式:

  1. 偏原生开发习惯的原生 Hummer 开发模式;
  2. 偏前端开发习惯的 MVVM 开发模式;

并且可以在同一个项目中进行混合开发,能很好地整合客户端和前端的开发资源,使所有人同时参与同一个项目的开发工作,并尽量保留原先的开发习惯。

Flutter,谷歌开源的移动UI框架,使用Dart语言,可以快速在iOS和Android上构建原生界面。支持混合开发,一套代码(即源码)编译成Android和Ios安装包,区别于Hummer是一套js代码生成原生代码。有三棵树:Widget、Element、RenderObject,分别相当于Activity、View和Painter。控件从顶部往底部-依次传递数据,给子控件赋值;从底部到顶部-依次传递大小,传递自身大小到父控件,以放在合适的位置;使用RelayoutBoundary和RepaintBoundary,来避免每次都重新遍历,以及每层都重新绘制;

包含Emmber(系统底层,也叫嵌入层)、Engine(Skia、Text、Dart)、FrameWork(动画、动作等API层,Material-安卓控件组,Cupertino-苹果控件组)三层;

包含UI线程(控件交互)、IO线程(内存读写)、GPU线程(像素渲染)、平台线程(Engine与外部,包含API等交互);

显示原理为:用户输入/操作-动画-创建Widget-布局-绘制-组装-光栅化(通过VSync信号,调用Skia),每一个层级(同层的child)叫Isolate,各层彼此隔离,不共享内存;

优势:Engine直接通过Skia,来调用OpenGL进行绘制,区别于RN则需要通过JS交互,生成自定控件,交由系统来绘制,速度更快。

三个特性:

1、禁止反射;

2、支持JIT和AOT,安卓支持热加载,而苹果还在商量中;

3、状态不变用StateLessWidget,变化用StateFullWidget,没有public、protected和private这些关键字,使用下划线“_”开头的变量或者函数,表示只在库内可见。

4、项目打包,包含Skia(安卓本身有,所以不用)、DartVm(7M多)等库。

PhoneGap,集成Cordova最好的一款。历史如此:最先是PhoneGap先出现,后来被Adobe收购,然后此产品转到Apache公司改名为Cordova,继续发展,最后Adobe把PhoneGap给Apache,最终产品名是Cordova,但也有人称为PhoneGap,其实到目前为止已经成为一个东西。而它的主要作用是提供给Web高级开发一个运行环境,用于产品需求不确定性模块的开发(其实可以称为烂尾工程的维护),如此来保证产品的完整性;但它的体验仍然不如Native开发,仍然要转为Native;而Web开发发挥能力的主要方面在于Wap商城,如公司微信公众号或其他产品集成自己产品,如果从战争方面来说,Native用于守城和形象维护,而Web用来四处攻城略地

Icenium,Telerik公司开发,增强PhoneGap的功能,减少Cordova的复杂性,不用安装sdk,开发工具包分为四个部分:

Graphite:轻量级、适用于Windows的开发环境,只有10M左右。

Mist:网页端开发环境,可以与Graphite同步,同步机制包含版本控制功能,同步以Git网址为基础,支持Github和其他类似网站。不过Mist功能局限性较大,对于非Windows用户没有多少吸引力。

LiveSync:实时编译,在所有已连接的设备上运行代码,并获得预览图,比xCode的错误提示更加直观。LiveSync支持iPhone、Nexus 7等多种设备。

Kendo:Kendo是整个开发包的核心部分,它能优化并转换代码,生成原生安装包,以适应每种设备。

Icenium,增强PhoneGap的功能,减少Cordova的复杂性,由Telerik开发,基本不用安装sdk,开发工具包分为四个部分:

MobileAngular,一个完全模仿App控件做的一个H5框架,框架地址。

Sencha Touch,支持Web标准以及各种手势动作,异常强大;WX5,一个开源H5平台软件,可直接把开发资源生成Android apk和Apple ipa文件,并发布到应用市场。

Ionic,使用MVVP模式,支持AngularJs和Sass

ReactNative,支持得到App端全套API支持,如取图、Sensor等;同样也支持IOS。不支持Vue,发布周期慢且固执。

weex,阿里开源,支持Android和IOS。目前开源版本已经停止维护,可以放弃了。

有人说一款应用,80%的人只访问20%的页面,其他功能相当浪费,因此将多余部分做成H5。个人深感这句话的深意,那么以后前端应该做IOS+Android+H5的全栈工程师。

拓展学习:Android如何从外部跳进App

Q群大佬-谦允,2021/4/22如是说:

 总归需要一套跨端方案的,跨端方案提效非常明显,而现有的技术方案有几个问题

1. RN 社区发布周期极其缓慢,而且很固执,facebook 官方经常和社区在技术方案上产生冲突,比如打包器抛弃 webpack + babel,自己招了 babel 的人来搞

2. RN 没法跑 Vue,特别是现在 Vue/React 已经形成了两套技术路线(运行时动态 diff 和模板 AST 静态 diff),国内 Vue 工程师多,All in 到 React 生态风险比较大

3. Weex 开源版本停止维护,基本上就可以抛弃了

4. Flutter dart 缺少静态反射这样重要的功能,Dart 虚拟机甚至很难脱离 Flutter 体系编译

5. Dart 虚拟机 AOT 部分和 AST 执行部分是拆分成两套虚拟机,如果要做动态下发,得嵌入两套虚拟机,体积就无法接受了,然后还得做 C++ 类名等改名

6. 经过 V8 实践,字节码虚拟机是王道,是未来,但是 Dart 虚拟机还是硬要上源代码虚拟机,技术路线明显走错了

7. Flutter 到现在依然很难做到半屏等渐进式改造,多页面共享虚拟机方案依然充满 trick,官方今年推出的低资源多虚拟机方式明显不是最终方案。

引用:Flutter 跨平台演进及架构开篇 - Gityuan博客 | 袁辉辉的技术博客袁辉辉, Gityuan, Android博客, Android源码, Flutter博客,Flutter源码http://gityuan.com/flutter/

这篇关于Android高级之第十一讲Hybird开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/411474

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。