蓬勃发展:移动开发——关于软件开发你需要知道些什么
一、前言
移动开发一直都是软件开发领域中最有趣的领域之一,这是因为:
1、移动开发为“只有一个人”的开发团队提供了一个非常独特的机会,让他可以在相对较短的时间内建立一个实际的、可用的、有意义的应用程序;
2、移动开发也代表着创业的机会,这是大多数程序员梦寐以求的;
3、对那些喜欢单打独斗的软件开发者而言,基于移动设备的应用开发不只是一个构建自己的项目的机遇,它可以说就是软件开发的未来,因为移动设备正在成为我们生活中越来越大的一部分。
本文主要介绍移动开发是什么?概略介绍一些主流的移动平台,并且讨论一下现有的支撑移动开发的技术,这样你就可以对移动开发是否适合你有一个好的判断。
二、什么是移动开发
移动开发是在任何一种移动设备进行任何形式的开发(包含了开发在手机、平板电脑、智能手表以及其他各种可穿戴设备上运行的应用程序,这些设备上原本已经运行着某种类型的移动操作系统);这也并不意味着一定是纯移动应用程序,因为即使是Web开发者,当前也必须要兼顾到如何从移动设备上使用和访问他们的Web应用程序。
移动应用程序甚至完全是作为Web应用程序开发的,只是专门应用于移动设备上。这是因为,随着移动设备的功能变得越来越强大,浏览器在未来必然将取代操作系统,发挥更大的主导作用。
三、主流移动开发平台
移动端开发目前有三大主流平台(ios、Andorid、Harmony);
3.1、ios
iOS是由苹果公司开发的,它只运行在苹果的硬件产品上(目前iOS运行在iPhone、iPod、iPad、Apple Watch和Apple TV上,预计将来会有更多运行iOS的设备)。
iOS的核心与Unix非常类似,它基于Darwin(BSD);与macOS共享一些重要的框架,它的用户界面基于苹果的Cocoa UI,Cocoa UI同时也用于macOS的应用程序,但已经针对触摸设备进行了优化和重新设计,被称为Cocoa Touch。
苹果公司为iOS开发者提供了数个用来开发iOS应用程序的原生工具和库,尽管你不一定非要使用苹果公司的开发工具来构建应用程序,但是你必须有一个运行macOS的Mac才能构建应用程序。iOS应用程序通常是使用Objective-C编程语言或者现在更为流行的平台开发语言Swift构建的。
目前ios在全球移动端的市场占有率大概为20%左右。
3.2、Android
Android是在市场中占有份额最大、最主要的移动操作系统,达到70%左右,而iOS仅占20%左右(但这个数字有点儿欺骗性,因为Android是一个支离破碎的市场,由不同制造商生产的、运行着不同版本的Android操作系统的许多不同设备组成)。
Android系统由谷歌公司支持,是全开放的(任何人都可以构建一个使用Android系统的设备,它被设计成可以在各种各样不同的硬件平台和设备上运行,具有非常多不同的形式和功能)。苹果公司支持的iOS系统则不开放(iOS则被设计用来运行在特定的苹果设备上,而且只能在苹果设备上运行);
Android是基于Linux内核的,Android的源代码是由谷歌公司作为开源项目发布的。与苹果公司一样,谷歌也提供了一些用于Android开发的原生工具,但你也不必一定要使用它们。
Android操作系统应用程序的原生开发平台使用的是Java。
3.3、HarmonyOS
截至2024年,运行鸿蒙系统的设备已经超过10亿台,鸿蒙操作系统占全球市场的约4%,在中国市场的份额超过了16%,显示出其在中国本土市场的强劲表现和增长潜力。
HarmonyOS是华为公司于2019年8月9日在东莞举行的华为开发者大会(HDC.2019)上正式发布的面向全场景的分布式操作系统(HarmonyOS旨在打破设备间的壁垒,实现无缝的跨设备体验),可以创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端,实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码健壮性,并实现更好的运行性能【同时,提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用】。
如果你要开发一个移动应用程序,并且有志于成为一名移动应用程序开发者,你的选择就是iOS、Android或HarmonyOS。
四、移动开发是如何完成的
在iOS和Android刚问世时,如果你想学习如何为这两个平台开发移动应用程序,你就需要学会如何使用iOS或者Android提供的原生工具(如ios原生工具就是XCode和Objective-C;Android原生工具就是在Eclipse、NetBeans或者Java上的Android SDK插件)。
今天,选择就很多了;围绕着移动应用程序有无数框架、工具、平台等一整套生态系统。几乎每一门编程语言都以这种或那种方式支持移动开发,移动应用程序甚至可以被构建成只在移动浏览器中运行。
4.1、原生开发
我们可以天然地使用移动操作系统供应商为我们提供的工具来开发移动应用程序(对iOS来说,最初的工具包括是XCode和Objective-C,但随后苹果公司发明了一种名叫Swift的新语言,它现在是开发iOS应用程序的首选语言;在Android的世界里,除谷歌公司自己推出的Android Development Studio IDE之外,其他的都没有什么变化。Java仍然是首选的开发语言)。
原生的移动开发的最大问题是:不管是开发iOS应用程序还是Android应用程序,你必须针对iOS和Android完全重写应用程序的代码。(如果你想支持Windows Phone或其他小众的平台,你也必须在该平台上进行同样的操作。)这并不是什么大问题,但应用程序通常需要得到平台的支持,因此,尝试在两个或更多完全不同的平台上支持不同版本的应用程序,无疑有点儿像是在痴人说梦。
Android开发和iOS开发几乎完全不同。工具不同,语言不同,框架不同,甚至开发模式都不同。如果你想要为某个应用程序创建一个iOS版本和一个Android版本,你必须准备好要学会这两个截然不同的而又都在不断演变的平台。
原生开发最大的优势就是速度;可直接调用硬件,获得硬件级的性能。
4.2、跨平台框架与工具
有一些框架实际上也是生成原生代码并封装成真正的原生的库,因此它们只是对原生语言和工具的抽象,所以仍然需要你了解和使用原生的库和框架。
另外一些解决方案可以构建出混合应用程序,包含有一些原生组件、一些基于Web或HTML的组件,并且依赖于内置的移动浏览器来创建应用程序中的大多数用户界面与功能。
选择跨平台的框架解决方案的考虑事项:
1、编程语言
你可能不希望同时陷入即要学习全新框架,又要学习移动开发,还要学习新编程语言的泥潭之中,因此你可能想要选择一个支持你已经熟悉的语言的跨平台解决方案。
2、原生还是混合
有好几种跨平台解决方案,它们最终将代码编译成移动操作系统的原生格式,然后直接连接到原生库和API上。我最喜欢的就是Xamarin,它允许用C#编写应用程序,但是原生构建的应用程序的所有优点和特性你都可以继续享用。
另外一些跨平台解决方案,如Cordova,采用的是一种混合方法,其中应用程序并非原生的应用程序,但它看起来像原生的应用程序。
在通常情况下,原生模式创建的应用程序运行速度会更快,看起来更像是移动平台直接运行应用程序,但是一些跨平台混合解决方案正变得如此接近原生模式,以至于很难分辨出两者之间真正的区别。
3、平台支持
几乎所有的跨平台解决方案都支持iOS和Android,但有一些跨平台解决方案也支持macOS或者Windows等桌面操作系统,还有一些支持较小的手机操作系统,甚至包括Raspberry Pi。如果除了iOS和Android系统,你对支持的平台没有特殊的需求,那我就不担心除这两个“大佬”之外的跨平台支持了。
开发移动游戏就是另一回事了。如果你正在做游戏开发,你可能想要选择一个可以支持尽可能多的平台的工具。像Unity 3D这样的工具允许你创建可以在你能想到的每一个平台上运行的游戏,就算是同时开发出Web版本也不在话下。
4、代码复用
即使一个框架是跨平台的,那也并不意味着你可以为应用程序只编写一个版本的代码就能让它在所有被支持的平台上运行。
通常,支持原生开发的跨平台解决方案代码的可复用性都较差,因为它们与原生框架及其库、用户界面元素和范型的绑定更为紧密;你可能需要在下面两者之间做出取舍(1、更为原生化的操作系统,拥有已经被打上深深烙印的界面外观、用户体验和设计模式;2、共享更多的代码)。
近来,像Xamarin这样的跨平台解决方案已经推出了新版本,以便于让你能够将上述两种选择的优点兼而得之。例如,Xamarin使用了一个名为Xamarin Forms的通用UI库,它允许你通过在原生UI和底层操作系统的框架之上创建另一个抽象层,在平台之间实现更大比例的代码复用。
代码复用取决于你正在构建的应用程序的类型,以及你希望在多大程度上让你创建的应用程序与你针对的平台上完全原生构建的应用程序相互融合。
五、移动Web应用
开发移动应用程序的最后一个选择是构建一个完全基于Web的应用程序(随着移动浏览器功能的日益强大,以及自适应Web技术的逐步改进,这一选择正变得越来越可行。选择这种开发模式,你可以像在Web上构建任何其他Web应用程序一样构建一个Web应用程序,但是它又被有针对性地设计成可以在移动设备上运行)。
许多移动操作系统浏览器甚至有hook程序,支持从Web浏览器内部调用原生功能,因此你可以执行诸如获取位置数据、访问设备上的摄像头之类的操作。甚至有很多框架可以帮你创建移动Web应用程序,这些应用程序在特定的移动操作系统上运行时看起来就像原生应用程序一样。
未来是属于移动Web应用的,只是现阶段还没有实现而已。
六、移动开发的注意事项
鼓励那些把进入软件开发行业视作畏途的初学者去构建一些移动应用程序,并将它们部署到一个移动应用商店中。这样做可以帮助你获得领先于他人的优势,证明你实际上可以编写代码并生成完整的可工作的应用程序。
个人认为,对进入软件开发行业而言,移动开发是极好的选择,因为它的进入门槛很低,而且它是一个必将持续增长的软件开发领域(几乎所有人都可以成为移动应用的开发者,甚至可以发布自己的移动应用程序,也许还能因此而赚到钱;开发移动应用程序,团队的规模不需要非常大。也就是说,哪怕是只有一名开发者的团队也可以在相对较短的时间内创建出重要的移动应用程序,这可以作为一条优质的渠道以便于在未来获得工作机会,甚或是合同)。
移动开发在未来几年内一定会持续增长,因此移动应用开发者的未来一定是一片大好。
相关文章:

蓬勃发展:移动开发——关于软件开发你需要知道些什么
一、前言 移动开发一直都是软件开发领域中最有趣的领域之一,这是因为: 1、移动开发为“只有一个人”的开发团队提供了一个非常独特的机会,让他可以在相对较短的时间内建立一个实际的、可用的、有意义的应用程序; 2、移动开发也代…...
1095. 山脉数组中查找目标值
目录 题目解法lambda在这是怎么用的? 题目 (这是一个 交互式问题 ) 你可以将一个数组 arr 称为 山脉数组 当且仅当: arr.length > 3 存在一些 0 < i < arr.length - 1 的 i 使得: arr[0] < arr[1] <…...

【深度学习】InstantIR:图片高清化修复
InstantIR——借助即时生成参考的盲图像修复新方法 作者:Jen-Yuan Huang 等 近年来,随着深度学习和计算机视觉技术的飞速发展,图像修复技术取得了令人瞩目的进步。然而,对于未知或复杂退化的图像进行修复,仍然是一个充满挑战的任务。针对这一难题,研究者们提出了 Insta…...

推荐一款PowerPoint转Flash工具:iSpring Suite
iSpring Suite是一款PowerPoint转Flash工具,使用iSpring Suite 8可以轻松的将PPT演示文档转换为对Web友好的Flash影片格式。软件界面简洁,使用方便。为什么要转换成flash格式呢?Flash格式的最大特点是体积小巧、易于分发,兼容所有的操作系统…...

如何搭建汽车行业AI知识库:定义+好处+方法步骤
在汽车行业,大型车企面临着员工众多、价值链长、技术密集和知识传播难等挑战。如何通过有效的知识沉淀与应用,提升各部门协同效率,快速响应客户咨询,降低销售成本,并开启体系化、可持续性的知识管理建设,成…...

创新材料科技:铜冷却壁助力高炉节能降耗
高炉用铜冷却壁是高炉内部的一种构件,通常用于高炉的炉身部分。它的主要功能是在高炉冶炼过程中冷却炉壁,以防止炉壁过热。铜冷却壁通常由铜制成,因为铜具有良好的导热性和耐腐蚀性,能够有效地将热量从高炉内部传导到外部…...

Proteus中单片机IO口外接LED输出低电平时,引脚却一直保持高电平的问题(已解决)
文章目录 前言解决方法后记 前言 一个排阻接八个 LED,方便又省事,但出现了P1端口输出低电平后,仿真引脚却一直显示红色保持高电平不变,用电压表测量显示 2V 左右。 这是仿真的问题,在用开发板时是不会遇到的ÿ…...
Obsidian vs Typora
引言 近来几日,自己也算是用了一段时间的Obsidian了,也是有资格来说一下使用感受了。当前感觉是自己未来很长一段时间将会一直使用Obsidian了。 Typora vs Obsidian Typora 优点 整体好看,简洁,所见即所得 缺点:…...

非线性数据结构之图
一、有向图(Directed Graph) 1. 定义 有向图是一个由顶点(节点)和有方向的边(弧)组成的图。在有向图中,每条边都有一个起点和一个终点,表示从一个顶点到另一个顶点的关系。 2. 特…...

vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由
vue3项目history模式部署404处理,使用 historyApiFallback 中间件支持单页面应用路由 在现代的 web 开发中,单页面应用(SPA)变得越来越流行。这类应用通常依赖于客户端路由来提供流畅的用户体验,但在服务器端…...
不同的科技查新机构之间有什么区别?
科技查新,作为一种确保科研项目新颖性、先进性的重要手段,在现代科研活动中扮演着至关重要的角色。然而,在众多提供科技查新服务的机构中,它们之间的区别究竟体现在哪些方面呢?本文将从服务内容、专业领域、权威性与客…...

Pycharm,2024最新专业版下载安装配置详细教程!
先来一段官方介绍,PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能…...
BERT预训练的MLM和NSP任务的损失函数都是什么?
引言 BERT预训练过程中包括两个主要任务:Masked Language Modeling(MLM) 和 Next Sentence Prediction(NSP)。 MLM损失函数: 在MLM任务中,模型需要根据上下文预测被MASK掉的词语。具体来说,输入序列中的一部分词语被随机MASK,模型需要依据未被MASK的词语来预测这些被MASK…...

微信发布测试版4.0,碰瓷NT版QQ?
不知有没有小伙伴发现,就在最近,微信推出了全新版本:4.0.0测试版本,张小龙,你在搞什么飞机? 有什么新活儿了嘛 记得上一次发布腾讯QQ的NT版本,在网上也是引发了不小的吐槽。很多网友戏称为“脑瘫”版本&am…...

数据库->视图
目录 一、视图 1.什么是视图 编辑 2.创建视图 1.语法 3.使用视图 4.视图的功能 1.屏蔽相关字段 2.对外提供统一访问规范 3.视图和真实表进行表连接查询 5.修改数据 6.注意事项 7.删除视图 1.语法 8.视图的优点 1. 简单性 2. 安全性 3. 逻辑数据独⽴性 4. 重…...

华为HarmonyOS打造开放、合规的广告生态 - 贴片广告
场景介绍 贴片广告是一种在视频播放前、视频播放中或视频播放结束后插入的视频或图片广告。 接口说明 接口名 描述 loadAd(adParam: AdRequestParams, adOptions: AdOptions, listener: AdLoadListener): void 请求单广告位广告,通过AdRequestParams、AdOptions…...
vue3 v-for循环子组件上绑定ref并且取值
vue3 v-for循环子组件上绑定ref并且取值 // 要循环的变量 const views ref([])// 数组存所有ref dom const itemsRef ref([])const refresh (index) > {// 取出ref dom子组件并且调用其方法itemsRef.value[index].initChart() }<div class"block" v-for&quo…...

GitHub个人主页美化
效果展示 展示为静态效果,动态效果请查看我的GitHub页面 创建GitHub仓库 创建与GitHub用户名相同的仓库,当仓库名与用户名相同时,此仓库会被视作特殊仓库,其README.md(自述文件)会展示在GitHub个人主页…...
云短信平台优惠活动
题目描述 某云短信厂商,为庆祝国庆,推出充值优惠活动。 现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。 输入描述: 第一行客户预算 M M M,其中 0 < M < 1000000 0<M<100000…...
Pyecharts使用本地文件绘制美国地图
访问我的github仓库outer_resources中的USA.json文件: big_data_analysis/outer_resources/USA.json at main Just-A-Freshman/big_data_analysis 保存到当前目录下; 随后运行代码: from pyecharts import options as opts from pyecharts.charts import Map from pyechar…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...