一、前言
移动开发一直都是软件开发领域中最有趣的领域之一,这是因为:
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应用的,只是现阶段还没有实现而已。
六、移动开发的注意事项
鼓励那些把进入软件开发行业视作畏途的初学者去构建一些移动应用程序,并将它们部署到一个移动应用商店中。这样做可以帮助你获得领先于他人的优势,证明你实际上可以编写代码并生成完整的可工作的应用程序。
个人认为,对进入软件开发行业而言,移动开发是极好的选择,因为它的进入门槛很低,而且它是一个必将持续增长的软件开发领域(几乎所有人都可以成为移动应用的开发者,甚至可以发布自己的移动应用程序,也许还能因此而赚到钱;开发移动应用程序,团队的规模不需要非常大。也就是说,哪怕是只有一名开发者的团队也可以在相对较短的时间内创建出重要的移动应用程序,这可以作为一条优质的渠道以便于在未来获得工作机会,甚或是合同)。
移动开发在未来几年内一定会持续增长,因此移动应用开发者的未来一定是一片大好。