H5手机App开发入门:技术篇

新人学习手机App开发,一开始总要选择一条学习路径。

如果你熟悉Java语言,可以学习安卓开发;如果熟悉脚本语言(比如Python或Ruby),可以学习Swift语言,进行iOS开发;如果像我一样,比较熟悉Web网页技术,那么H5开发是最容易上手的。

手机App的技术栈可以分成三类。

(1)原生App技术栈(nativetechnologystack)

原生技术栈指的是,只能用于特定手机平台的开发技术。比如,安卓平台的Java技术栈,iOS平台的Object-C技术栈或Swift技术栈。

这种技术栈只能用在一个平台,不能跨平台。

(2)混合App技术栈(hybridtechnologystack)

混合技术栈指的是开发混合App的技术,也就是把Web网页放到特定的容器中,然后再打包成各个平台的原生App。所以,混合技术栈其实是Web技术栈+容器技术栈,典型代表是PhoneGap、Cordova、Ionic等框架。

如果已经掌握了Web技术,这个技术栈就主要学习容器提供的APIBridge,网页通过它们去调用底层硬件的API。

(3)跨平台App技术栈(cross-platformtechnologystack)

跨平台技术栈指的是使用一种技术,同时支持多个手机平台。它与混合技术栈的区别是,不使用Web技术,即它的页面不是HTML5页面,而是使用自己的语法写的UI层,然后编译成各平台的原生App。

这个技术栈就是纯粹的容器技术栈,ReactNative、Xamarin、Flutter都属于这一类。学习时,除了学习容器的APIBridge,还要学习容器提供的UI层,即怎么写页面。

(4)小结

H5开发主要用在混合技术栈。但是,跨平台技术栈的某些容器也会用到(比如ReactNative),因为它们的UI层借鉴了Web模型。

另外,混合技术栈和跨平台技术栈的基础,都是原生技术栈,因为最终都要编译成原生App。所以,不管使用哪一种技术栈,多多少少要了解一些各平台的原生技术。

下面就依次介绍上面三类技术栈,每个技术栈都会给出一个最简单的例子:加载网页。通过各种技术栈加载网页的不同做法,帮助大家理解它们的特点,对App的技术实现有一个总体的认识。

讲解具体的技术栈之前,大家需要知道,不管什么技术,最终在App里面显示网页,一定需要一个网页引擎,这样才能解析网页。

通常情况下,App内部会使用WebView控件作为网页引擎。这是系统自带的控件,专门用来显示网页。应用程序的界面,只要放上WebView,就好像内嵌了浏览器窗口,可以显示网页。

不同的App技术栈要显示网页,区别仅仅在于怎么处理WebView这个原生控件。

注意,不同系统的WebView控件名称不一样,安卓系统就叫WebView,iOS系统有较老的UIWebView,也有较新的WKWebView,作用都是一样的,差异在于功能的强弱。

原生技术栈分成iOS和安卓两个平台。

简单说,iOS的原生技术栈就是使用Object-C语言或Swift语言,在Xcode开发环境中编程。安卓的原生技术栈,则是使用Java语言或Kotlin语言,开发环境是AndroidStudio。

下面就来看看,它们怎么加载网页。

iOS开发需要安装Xcode。它是一种集成开发环境(IDE),也是苹果公司指定的iOS官方开发工具,所有苹果手机的App都由它打包生成。

它可以在Mac电脑上通过应用商店免费安装。注意,Xcode只支持Mac系统,不支持其他系统。

安装完成后,打开新建一个项目,类型是单视图App,然后系统会询问一些项目参数和储存位置,这里就不详细说明了。

然后,就进入了开发环境。

上面代码的意思是,启动App加载视图的时候(loadView()),新建一个WebView控件的实例。视图加载成功后(viewDidLoad()),WebView再去加载外部网页(红框部分)。

然后,就可以查看代码运行结果。点击工具栏的运行按钮,Xcode就会弹出一个iPhone模拟器,里面就是当前代码的运行结果。

如果一切正常,就可以让Xcode对源码打包,生成App的二进制安装文件。

安装完成后,打开新建一个项目,类型是"EmptyActivity"。

AndroidStudio会询问项目参数,包括项目名称、开发语言(Java)等,然后就进入了开发环境。因为它是基于JavaIDE修改的,懂Java的朋友应该对这个界面比较熟悉。

上面红框处的代码,就是在页面上添加并设置WebView实例,指定生成视图的时候(onCreate()),WebView实例去加载外部网页。

运行代码之前,AndroidStudio要求必须连接真机,或安装安卓模拟器。完成以后后,在工具栏上点击运行按钮,就可以运行代码查看效果了。

如果一切正常,就可以让AndroidStudio打包,生成App的二进制安装文件。

上面的原生技术栈需要自己新建WebView实例,相比之下,混合技术栈就简单多了。因为页面就是网页,所以容器已经设置好了WebView,开发者直接写页面即可。

PhoneGap和Cordova现在是两个独立发展的开源项目,但是彼此有密切的关系,可以简单理解成Cordova是PhoneGap的内核,PhoneGap是Cordova的发行版。

所有这些框架的共同点,都是使用Web技术(HTML5+CSS+JavaScript)开发页面,再由框架分别打包成iOS和安卓的App安装包。它们的优点是开发简单、周期短、成本低,缺点是功能和性能都很有限。

基于Cordova的框架,用法都大同小异,下面就以Ionic为例,演示如何加载外部网页。

$npminstall-gionic@latest$ionicstartmyAppblank--type=react$cdmyApp接着打开src/pages/Home.tsx文件,插入iframe标签即可。

上面代码中,由于页面本身就是网页,所以可以直接用iframe标签插入外部网页。

然后,在本机起一个Web服务,看看Demo的效果。

$ionicserve上面命令会自动打开浏览器窗口,访问本机的8100端口,在浏览器中显示网页效果。

上面的混合技术栈使用HTML语言编写页面,再用WebView控件加载页面,所以只写一次页面,就能支持多个平台。跨平台技术栈也能做到多平台支持,但是原理完全不同。

跨平台技术栈的框架,都是使用自己的语法编写页面,不使用Web技术,编译的时候再将其转为原生控件,或者使用自己的底层控件,生成原生App。这样就完全解决了Web页面性能不佳的问题。下面介绍三个这样的框架。

(1)原理

2013年,Facebook公司发布了React框架。这个框架是为网页开发设计的,核心思想是在网页之上,建立一个UI的抽象层,所有数据操作都在这个抽象层完成(即在内存里面完成),然后再渲染成网页的DOM结构,这样就提升了性能。

很快,工程师们就意识到了,UI抽象层本质上是一种数据结构,与底层设备无关,不仅可以渲染成网页,也可以渲染成手机的原生页面。这样的话,只要写一次React页面,就能分别编译成iOS和安卓的原生App。这就是ReactNative项目的由来。

(2)实例

然后,在命令行安装脚手架工具expo-cli,新建一个示意项目。

$npminstall-gexpo-cli$expoinitrnDemo

新建项目时,会要求你选择项目模板,可以选minimum模板。然后,还会要求你填写项目描述displayName,这个可以随便写。

然后,安装ReactNative自己的WebView控件。

$cdrnDemo$npminstall--savereact-native-webview

接着,打开主页面的脚本文件App.js,将其改成下面的代码。

上面代码中,ReactNative自身的WebView控件,编译时会分别转为iOS和安卓的原生WebView控件。

接下来,预览页面效果。可以先把它编译成Web版,在浏览器预览,这样比较快,立刻就能看到效果。

$npmrunweb

运行上面的命令,命令行会出现一个二维码。

这时可以打开手机端的Expo客户端,扫描这个二维码,就会显示App的页面。注意,计算机和手机必须在同一个局域网。

(3)ReactNative的问题

ReactNative的想法虽然很美好,但是实际开发中出现了各种各样的问题。

最主要的一个问题是,UI抽象层翻译出来的iOS和安卓原生页面,做不到完全一致,尤其是复杂页面,样式或功能存在差异。编译出来两个平台的原生App往往是一个正常,另一个会出现各种奇怪的小毛病。ReactNative的底层还是没有做到无缝适配,它至今没有发布1.0版(2019年底是0.61版),这多多少少也说明了一些问题。

Xamarin是微软公司的跨平台App开发框架,原理跟ReactNative很相似,只不过它的语言是C#。

上面代码中,首先新建了一个WebView控件的实例,然后把这个实例放到布局上,跟原生App的语法很像。

它自己实现了一套控件。打包的时候,会把这套控件打包进每一个App,因此不存在调用原生控件的问题。不管什么平台,都调用内嵌的自己那套控件,就能做到iOS和安卓体验完全一致。

上面代码使用的是Dart语言。它是Flutter的官方语言,接近JavaScript语法,但是多了静态类型支持。

通过上面的介绍,希望大家已经了解了各种技术栈的特点。

(1)原生技术栈的技能和体验最好,对于复杂的大型App,如果条件允许,应该采用这种方式开发。

(2)混合技术栈的成本低,灵活性好,对性能要求不高的简单App,尤其是纯展示性的页面,可以采用这种方式开发。

(3)跨平台技术栈适用于,存在外部或内部条件的限制,只有一个团队开发跨平台App的情况。

(正文完)

手机App的UI(用户界面),往往是App成功的关键因素:产品的外观是否漂亮,点击和滑动是否流畅,意图是否清晰,都会影响到用户的留存率。一个好的UI不仅体现了产品经理和开发者的素质,还可以有效降低拉新成本。

一般的开发者接到产品的UI设计方案之后,可能就会去网上找类似的效果,看看有没有开源代码。但是,优秀的开发者会努力思考,如何通过完全自定义来实现这个效果,做到功能和性能的最佳状态。

这就要求开发者具有实现高级UI的开发能力,理解安卓UI的底层实现原理,比如自定义View的渲染流程(onMeasure->onLayout->onDraw),以及交互设计(touch事件)。

怎样才能高效地学习安卓高级UI开发,早日进阶成为高级安卓工程师呢?这里介绍享学课堂的一门课程《高级安卓UI----自定义ViewGroup与UI性能优化》,它带大家一行一行代码去实现一个京东自定义ViewGroup,研究系统的FrameLayout与ViewPager的源码,最后通过阅读源码,分析ViewPager设计过程中的显示问题和性能问题。下图是课程介绍(点击看大图)。

这个课程是直播课程,在线实时答疑,特别邀请了Alvin老师(前三星/小米高级研发经理)主讲,只需要0.1元就能参与。听课之后觉得满意,还可以学习其他Android高级进阶的实战课程。

(完)

DeathGhost说:

使用过IONIC,感觉还不错....最近发现又出来个Flutter

秀妍说:

我用vue写了一个h5的webapp,然后用hbuilder打包成了一个api的文件,可以实现安卓手机安装使用,效果还不错

Kevin说:

阮老师,讲得通俗易懂。我本人也是做H5app开发的,但在性能和页面体验上确实与原生体验差很多,比如在页面加载速度,颜色显示,布局方面,如果是纯展示的app可以用H5,比如论坛,贴吧。如果做电商,业务系统还是推荐原生app

Xu说:

Electron属于哪个技术栈?

sammy说:

阮老师,后续的博文会按混合模式的技术栈更新下去吗?

rockswang说:

引用Xu的发言:Electron属于哪个技术栈?

javascript

Dream4ever说:

引用秀妍的发言:我用vue写了一个h5的webapp,然后用hbuilder打包成了一个api的文件,可以实现安卓手机安装使用,效果还不错

是说打包成了APK吧?

路人说:

uniapp不配拥有姓名

Joker说:

靳广辉,(我更喜欢'干河陈锦'这个名字)说:

或许跟您本人相比,我差了很多的东西,我今天能有机会可以和您通过留言交流是有原因的。

比如我在2019年8月21日进入郑州智游前端培训,在开堂的第一节课,我有幸知晓了“阮一峰”这个名字,或许我的老师介绍了两个“大神”,可我现在只记住了一个。

距离今天2019年12月18日。我的前端或许学的甚不入流,很多知识点都没掌握住。但这不是我想表达的重点。

有关文学的,您所述的很多的文学作品我几乎闻所未闻。我认为我的启蒙文学作品是《平凡的世界》,这本书使我产生了极大的感触,至少在很多个时候使我不能忘记。它被我放在置顶的位置,而我的身边,阅读过它的人甚少,而知晓的人更少。

我或许应该和您交流一些有营养的文字,而不是一味地倾诉。我见到你的第一章照片,引起了我的思考,您的面容大概是我于茫茫人海中相逢而不识的一张面孔,而把您的思想以及成就与您掺连在一起,有会觉得“原来是这么一个人”的感叹于震撼、或者有那么点吃惊。

最后,我不得不结束我和您的交流了。我期待您的回复,或许您觉得我是个有意思的人,那我们可以交流更多(当但,前提是建立在您感兴趣的情况下)。我今年21岁,有很多大胆的想法,我的生活态度大概就是“没有谁的一生尽如其意,但是我依然决定携梦前行。”目前来讲,文学的喜爱大于“学习代码”,或许是因为我没有更好的去了解“代码”而不知其味。期待您的回信,以及提携。

DY说:

引用Kevin的发言:阮老师,讲得通俗易懂。我本人也是做H5app开发的,但在性能和页面体验上确实与原生体验差很多,比如在页面加载速度,颜色显示,布局方面,如果是纯展示的app可以用H5,比如论坛,贴吧。如果做电商,业务系统还是推荐原生app

淘宝是原生的吗用着贼卡。

江云说:

丢火车说:

Alwaysnativetechnologystack

Hsing说:

引用DeathGhost的发言:使用过IONIC,感觉还不错....最近发现又出来个Flutter

貌似国内Flutter刷KPI还挺火的

xiaoqufengdi说:

uniapp/taro算跨平台技术栈吗?

哈哈说:

kbin说:

uniapp呢

tron说:

引用kbin的发言:uniapp呢

国际庄hello范儿说:

AndyRon说:

Swift文件的后缀是`swift`,不是`swifter`。

yinyin说:

我们公司也要弃用ReactNative了,现在在把功能一个个往原生转

jl说:

我觉得概述的很好,目前我是一名学生,基本都看懂了,非常感谢。

春续说:

apk吧?

前端最菜的鸟说:

老师的总结很清楚了,看完有了些学习方向

5.1ReactNative原理部分,掉了个字“这种做法”,即=>既

Cwz.说:

想知道用的是什么字体,看着非常舒服

xulihang说:

用过各种跨平台技术,最后还是选择了B4X。它把B4X语言编译成原生平台的Java和Objective-C,和原生开发的性能和效果是一样的,但只需掌握一套工具

THE END
1.Web技术什么是web技术web:超文本,超媒体,超文本传输协议 web技术指的是开发互联网应用的技术总称,一般包括WEB服务端技术和WEB客户端技术。 Internet和web的关系: web是Internet上最流行的应用之一,Internet为web提供了网络运行环境 web的出现极大的推动了Internet的普及和推广。 https://blog.csdn.net/m0_51709479/article/details/112511705
2.Web程序设计:构建网络世界的艺术与科学那么,Web程序设计究竟是什么呢?本文将对这一问题进行深入探讨。#百享新春分亿金# 定义 Web程序设计,也称为Web开发,是指利用Web技术(如HTML、CSS、JavaScript等)来创建和开发Web应用程序的过程。这些应用程序可以是简单的静态网页,也可以是复杂的动态网站、电子商务平台、社交网络等。Web程序设计涉及前端、后端https://baijiahao.baidu.com/s?id=1791491533002562655&wfr=spider&for=pc
3.计算机web技术介绍计算机web技术介绍 Web 客户端的主要任务是展现信息内容。Web客户端设计技术主要包括:HTML语言、Java Applets、 脚本程序、 CSS、 DHTML、插件技术以及VRML技术。下面是YJBYS小编给你带来的web技术相关知识,欢迎阅读! 1) HTML语言。 HTML是Hypertext Markup Language(超文本标记语言)的缩写,它是构成Web页面的主要工具。https://m.oh100.com/peixun/wangluojishu/244684.html
4.Web技术概述51CTO博客HTTP(Hypertext Transfer Protocol,超文本传输协议)是Web技术的核心,HTTP设计了一套相当简单的规则,用来支持客户端主机和服务器主机的通信。 HTTP采用客户/服务器(C/S)结构,定义了客户端和服务器之间进行“对话”的请求响应规则。客户端的请求程序与运行在服务器端的接收程序建立连接,客户端发送请求给服务器,HTTP规则https://blog.51cto.com/u_15060467/4192613
5.Web3是什么?能实现吗?区块链技术区块链相较之下,Web3引入去信任性,因此使用者可以在不信任任何特定方的情况下进行交易和互动。语义Web可让应用程式透过了解Web资料的内容和情境来执行复杂的任务。语义Web使用中继资料和人工智慧为使用者产生的资料提供含义(语义)。 Web3.0旨在更全面地转向目前于现有Web技术的某些方面发现的语义Web技术。例如,搜寻引擎提供更https://www.jb51.net/blockchain/935182.html
6.Web开发技术的发展Web 开发技术一直在不断发展,各种新的技术层出不穷。但是技术发展的本质是不变的,就是为了不断提高生产效率、创造更好的产品和服务和解决更多更难的问题。 一、静态页面时代 静态页面时代 缺点 只能显示静态内容 二、动态页面 前后端不分 1.CGI 时代 https://www.jianshu.com/p/8962ce3a5d07
7.Web3D技术综述AET摘要:WEB 3D(又称网络三维)技术是随着互联网与虚拟现实(Virtual Reality)技术的发展而产生的,其目的是在互联网上建立三维的虚拟世界,让人们更加清晰明了地了解真实的物体。目前,Web 3D技术在电子商务、教育、娱乐、虚拟社区等领域获得了广泛的应用。从该项技术的发展现状出发,归纳、总结了其主流技术和应用领域,对目前http://www.chinaaet.com/article/218191
8.Web前端技术Web前端技术 作者:张晓如 ISBN:9787560659077 出版社:西安电子科技大学出版社 出版年:2020 Web前端开发技术 作者:吴志祥等编著 ISBN:9787568043656 出版社:华中科技大学出版社 出版年:2019 Web前端开发技术 作者:张娅 ISBN:9787518432189 出版社:中国轻工业出版社 出版年:2021 Web前端开发技术 作者:章慧 ISBN:97873https://www.las.ac.cn/front/book/detail?id=3ac04f78857063d0e351a5b17acc01ac
9.Web开发技术(Java)教程(第四版)软件工程类定价:52 元样章下载:Web开发技术(Java)教程(第三版)—样章.pdf 购买地址: 教材简介教材简介 一、教材的基本信息 1.适用对象 本教材适用于计算机相关专业基于Java的Web开发课程的教学。 2.具备的知识和能力基础 学习本教材,需要具备基本的Java语言程序设计和数据库原理的相关知识,并且已经具有了基本的计算机基础知识http://www.neubooks.com/press/books!type1!m2/1032.htm
10.Web媒体技术MDN逐年来,Web 呈现、创建并管理音频、视频和其他媒体的能力以不断增长的步伐发展。今日有着大量可用的 API、HTML 元素、DOM 界面和其他不仅仅限于完成这些任务,而是为了将媒体和其他技术联合使用以实现非凡事物的特性可供使用。这篇文章列出了可能对你掌握这些技术有帮助的http://developer.mozilla.org/zh-CN/docs/Web/Media/
11.Web前端开发技术实验与实践HTML5CSS3JavaScript(第4版本书是重量实验教学示范中心联席会计算机学科组“十四五”规划教材,是中国大学出版社图书奖优秀教材、首批江苏省优秀培育教材《Web前端开发技术——HTML5、CSS3、JavaScript》(第4版·题库·微课视频版)的配套实验与实践教材。本书提供“实验教学大纲”“项目源码”“实训素材”“课外拓展训练答案”等配套资源。 https://item.winxuan.com/1202796760
12.Web日志安全分析浅谈随着Web技术不断发展,Web被应用得越来越广泛,所谓有价值的地方就有江湖,网站被恶意黑客攻击的频率和网站的价值一般成正比趋势,即使网站价值相对较小,也会面对“脚本小子”的恶意测试攻击或者躺枪于各种大范围漏洞扫描器,正如安全行业的一句话:“世界上只有两种人,一种是知道自己被黑了的,另外一种是被黑了还不知道的https://xz.aliyun.com/t/1121
13.《Web框架技术(Struts2+Hibernate+Spring3)教程(高等学校计算机当当网图书频道在线销售正版《Web框架技术(Struts2+Hibernate+Spring3)教程(高等学校计算机专业教材精选·算法与程序设计)》,作者:张志锋,出版社:清华大学出版社。最新《Web框架技术(Struts2+Hibernate+Spring3)教程(高等学校计算机专业教材精选·算法与程序设计http://product.dangdang.com/23257161.html
14.Web前端开发技术2024pdfepubmobi电子书Web前端开发技术 2024 pdf epub mobi 电子书 图书描述 本书全面、系统地介绍了网页设计与制作所涉及的各方面的内容和技巧,涵盖网页设计流程和各种Web前端技术:HTML、CSS、JavaScript和HTML5。各章都配置了大量的实用案例,图文并茂,效果直观。 Web前端开发技术 2024 pdf epub mobi 电子书 https://onlinetoolsland.com/books/26785200