写点什么

如何高效实现混合 App 开发?

作者:FinFish
  • 2023-08-21
    广东
  • 本文字数:2946 字

    阅读完需:约 10 分钟

随着越来越多的软件都是以 saas 或者云端的形式提供,因此,混合 App 的开发占比越来越大,大厂们纷纷都转向此类的开发。最近看到一些文章,混合 App 的开发,还能用计算机之父的那套理论--冯诺依曼结构来开开脑洞。


本篇文章,我们来大概介绍一下。

前置科普:哪些 App 能上架至应用市场?

苹果上架很多人都有误区,认为只要不是原生开发的 App(哪怕一点点功能),均无法上架。


实则不然。苹果接收的软件不区分 Web App、混合 App 还是原生 App:

1、Web App:App 里面 webview 打开远端的网站。Web App 最大的缺点是:加载资源都是远端每次都要重新加载速度会变慢,俗称网站打包的 APP。

2、混合 App:App 里面 webview 打开本地的 H5、js、css 和图片资源,不用读取远端的数据。加载的资源的减少大大加快 App 打开的速度,俗称混合开发的 APP

3、原生 App:逻辑框架和图片资源在本地,数据读取很少,在提交应用市场审核的时候,因为其均为本地打包加载,故没有很多的业务流程在 App 上架后能够进行改变,所以原生 App 不能灵活的应对市场需求,这也是为什么现在许多 App,甚至是大厂需要转战混合 App 开发的重要因素之一。


混合 App 开发方式-1:webview 加载网页

WebView 是一种在移动应用中嵌入网页内容的组件,用于实现 Hybrid 混合 App 开发。在 Hybrid 开发中,你可以将本地的原生应用代码(通常使用诸如 Java(Android)或 Swift/Objective-C(iOS)等语言编写)与 Web 技术(如 HTML、CSS 和 JavaScript)相结合,以便同时利用原生应用和 Web 内容的优势。


WebView 的工作原理大致是:

1、嵌入网页内容:这是最基本的组成。开发者可以使用 WebView 组件来创建一个视图,以便现实制定的网页(本地或远程);

2、加载 HTML、CSS 和 JavaScript 以便创建交互性更强、动态的界面,从而增强应用的用户体验;

3、通信桥梁创建,原生功能的调用:JavaScript 代码可以通过调用原生接口来使用设备的本地功能,例如访问相机、位置信息、存储等。原生代码可以将这些功能暴露给 JavaScript 脚本,以便在 WebView 中使用;

4、性能和安全: WebView 虽然能够嵌入 Web 内容,但其性远不如完全的原生应用。此外,WebView 本质上运行在应用的沙盒环境中,与应用的其余部分分离开来,安全性倒是在一定程度上可以保障。

这类 App,在互联网 2.0 阶段之初,网页盛行的时候,其技术层一度受到开发者的青睐,但随着应用市场审核机制的完善及进步,此类 App 开发完成后,需要经过多次的审核方能上架,甚至永远无法通过。

于是,使用 Java classload 这类的混合 App 开发的便开始进入了 App 开发的主流。


混合 App 开发方式-2:java classload 类加载机制

使用 Java 的类加载机制从网络流读取字节码加载类,通常被称为远程类加载(Remote Class Loading)。这种技术在特定情况下可以用于实现混合 App 开发,尤其是在需要动态更新应用功能或模块时。下面是其基本原理:

  1. 生成和传输字节码: 在混合 App 开发中,你可以将一些 Java 类的字节码编译成二进制形式,并通过网络传输到移动应用。这些字节码表示你要引入的一些新功能或模块,或者用于更新已有功能。

  2. 自定义类加载器: 在应用中,你需要实现一个自定义的类加载器,以便从网络流中读取字节码并加载对应的类。Java 的类加载机制允许你通过扩展 ClassLoader 类来创建自定义的类加载器,它可以覆盖加载类的默认行为。

  3. 类加载过程: 当应用代码需要使用某个类时,首先会通过自定义的类加载器进行查找和加载。如果该类尚未加载,类加载器会从网络流中读取相应的字节码,并将其转化为 Class 对象。加载后的类可以在应用中被实例化和使用,就像通过常规方式加载的类一样。

  4. 安全和隔离性考虑: 远程类加载涉及到安全性和隔离性的问题。你需要确保只有受信任的字节码才能被加载,以防止恶意代码的注入。此外,你还需要注意避免类冲突和内存泄漏等问题。

  5. 动态更新和模块化: 远程类加载使得你可以在不重新发布应用的情况下,通过更新远程字节码来引入新的功能、修复 bug 或者修改现有功能。这在需要快速响应用户需求或者进行 A/B 测试时非常有用。

混合 App 开发方式-3:参考冯诺伊曼结构,网络传输的包既可以是数据也可以是代码

参考冯诺伊曼结构,将代码和数据存储在云端进行混合 App 开发,可以实现一种类似于"云端混合应用"的架构。这种架构的基本原理是将应用的核心逻辑和数据存储在云服务器上,而移动设备上的应用则主要负责展示界面、用户交互和与云端通信。

以下是其基本原理:

  1. 分离前端和后端: 在这种架构中,移动设备上的应用主要充当前端角色,负责用户界面的展示、用户输入的响应以及与云端的通信。而应用的核心逻辑和数据存储则放在云端服务器上,充当后端角色。

  2. 云端逻辑和数据: 应用的核心逻辑、业务处理和数据存储都在云端进行。这包括应用的业务逻辑、数据库、文件存储等。移动设备上的应用通过与云服务器进行通信来获取所需的数据和执行必要的操作。

  3. 移动端界面: 移动设备上的应用主要负责展示用户界面,以及接收用户输入并将其传递给云端。移动端应用可以使用本地技术(如原生 UI 组件或本地的 WebView)来构建用户界面,同时通过网络请求向云服务器发起请求。

  4. 云端通信: 移动设备通过网络连接与云服务器进行通信。这可以通过 HTTP 协议、WebSocket 等方式进行。移动端应用发送请求到云端,云端根据请求执行逻辑并返回相应的数据或结果。

  5. 动态更新和维护: 在这种架构下,应用的核心逻辑和数据存储在云端,因此可以实现动态更新应用的功能、修复 bug 或引入新的特性,而无需用户手动更新应用。这样可以更快地响应用户需求和市场变化。


现代超级 App 如微信、支付宝、百度、美团等,其构建技术便是类似的理念:小程序+App 壳子


相比于传统的原生应用开发技术,小程序技术具有轻量、快速开发、跨平台、无需安装、更便于用户使用等优势。小程序不需要用户下载安装即可使用,同时小程序的开发成本相对更低,开发速度更快,也更易于维护更新。小程序技术还支持跨平台运行,可以同时在多个移动设备上运行,极大地扩展了应用的覆盖范围,为企业和开发者带来更大的商业价值。市面上一些比较知名的小程序容器技术产品包括:微信、支付宝、百度、抖音小程序等,他们都是以完善大社交平台自有小程序生态的技术底座,能提供第三方进行私有化部署的有:FinClip、mPaaS 等产品。据了解,FinClip自行研发的小程序容器技术,能够让企业的 App 能具备快速运行小程序的能力,他们家的 SDK 还能嵌入除 App 以外的职能设备终端中(如 Linux、Windows、MacOS、麒麟等操作系统上运行)。


随着移动互联网的蓬勃发展,传统的原生应用和 Web 应用逐渐融合,冯诺伊曼结构则为此提供了坚实的理论基础。通过将应用的核心逻辑和数据存储在云端,实现了应用的分离,不仅为开发者带来了更便捷的维护和更新方式,也为用户提供了更加轻量级的体验。小程序技术则进一步推动了这一趋势,以其低入门门槛和快速开发的特点,让开发者可以更加灵活地构建功能丰富的应用。


然而,云端混合应用的发展也面临一些挑战。网络连接的稳定性、安全性、用户隐私等问题需要仔细考虑和解决。同时,技术的发展也应该紧密结合用户需求,确保应用的性能和用户体验能够得到持续提升。云端存储、小程序技术等元素的融合,正在引领着移动应用开发的新潮流。未来,我们可以期待更多创新和突破,让移动应用的开发变得更加智能、便捷和符合用户期待。无论是开发者还是用户,都将在这个变革的浪潮中获益。

用户头像

FinFish

关注

还未添加个人签名 2020-11-25 加入

还未添加个人简介

评论

发布
暂无评论
如何高效实现混合App开发?_混合开发_FinFish_InfoQ写作社区