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.手机移动端APP制作开发的方式有这些原生开发是手机移动端APP开发方式的一种,是基于智能手机本地操作系统编写的第三方应用程序,一般根据iOS和安卓系统的不同分别采用Objective-C swift和JAVA两种语言进行程式编写。一般有原生APP开发需求的企业可以找第三方软件开发公司或者自建团队来实现。 1. 优点: https://product.11467.com/info/20872537.htm
2.安卓APP开发定制:打造专属移动应用的全方位解析跨平台 随着移动互联网的普及和多样化终端设备的出现,跨平台开发已成为安卓APP开发定制的重要趋势。通过采用跨平台开发技术,我们可以实现一次开发、多平台运行的目标,降低开发成本和提高开发效率。 社交化 社交化已成为移动互联网的重要特征之一。因此,安卓APP开发定制也将更加注重社交化功能的设计和开发。通过引入社交元素https://www.pbids.com/aboutUs/pbidsNews/1861317092139175936
3.Android移动应用开发实战:从0到1构建一款APP如何开发安卓app《Android移动应用开发实战:从 0 到 1 构建一款 APP》技术文章 在现代移动互联网时代,Android应用开发已经成为了技术行业的重要组成部分。随着智能手机普及,移动应用已深入到我们生活的方方面面,开发一款高质量的Android应用,涉及到需求分析、界面设计、功能开发、测试发布等多个环节。本文将从实际开发的角度,深入探讨如https://blog.csdn.net/m0_38141444/article/details/144126122
4.安卓手机软件开发教程如何正确制作手机APP→MAIGOO知识摘要:手机软件是指安装在智能手机上的软件,不同智能手机的系统不同,安装的软件也有差异。安卓手机软件应用非常广泛,其开发过程包括环境搭建、建立项目、程序调试这三大步骤。制作手机APP不仅仅要掌握开发方法,还要学会分析用户需求,设计UI视觉,设计产品原型,这样才能做出好的产品,接下来就和小编一起来了解一下吧。 https://www.maigoo.com/goomai/158770.html
5.一款安卓app的开发与设计介绍在Android Studio 中创建新项目 ?选择 Activity(应用程序活动)并选择应用程序的名称和包名称。 在项目中可能会包含多个 Activit安卓app开发工具y,每个 Activity 都代表了应用程序中的不同屏幕或用户界面。 3. 编写代码 在Android Studio 的编辑器中编写代码。 Android 应用程序使用 Java 编写,并使用 XML 文件来定义https://www.yimenapp.com/kb-yimen/58781/
6.App前端开发跨平台框架比较:ReactNativeFlutterXamarin等自有渲染引擎:提供自有的渲染引擎,支持丰富的动画和自定义 UI 设计。 (3)一次开发,多端运行: 共享代码:允许在 iOS 和 Android 平台上共享代码,提供一致性用户体验。 (4)强大的开发工具: 热重载和丰富工具:Flutter 支持热重载,提供丰富的开发工具,如 Flutter DevTools 等。 https://xie.infoq.cn/article/4f2ab8e393f3e55618207526a
7.从零开始设计一款APP之Android设计规范篇优设网《从零开始设计一款App》系列文章共6部分,之前已经讲了前5个部分,今天把设计规范部分也给大家科普下,赶紧来学习。 U妹列了一个小小的目录: 基础概念 Android界面设计规范 Android切图标注 安卓开发单位换算 总结 一. 基础概念 1. 什么是DPI? DPI(Dots Per Inch):每英寸点数,表示指屏幕密度。是测量空间点密度的https://www.uisdc.com/android-design-guideline-in-app/
8.移动开发入门:七套Android平台主流应用程序模板Universal是一套出色的应用程序模板,能够为大家提供所有必要功能,从而帮助各位在无需进行任何严格编程或者脚本编写的前提下轻松创建出***的Android应用程序。Universal非常适合那些需要展示大量内容的开发者,其中包含近十种不同的内容整理方式,具体包括社交媒体、个人博客甚至能够支持第三方网站。它还支持Material设计风格,但https://mobile.51cto.com/design-490495_all.htm
9.《2024年基于Android的智能家居APP的设计与实现》范文本文详细介绍了基于Android平台的智能家居APP的设计与实现。通过需求分析、平台特点、设计思路和实现方法等方面的阐述,展示了智能家居APP的重要性和应用前景。本文所设计的智能家居APP具备设备控制、场景设置、定时任务、语音控制等功能,同时具有良好的用户体验和安全性。在实现过程中,采用了先进的技术路线和开发流程,确保https://wenku.baidu.com/view/158de39eed06eff9aef8941ea76e58fafab045a5.html
10.基于安卓Android平台的降计步系统APP的设计(AndroidStudio)基于安卓Android平台的健康计步系统APP的设计(AndroidStudio)(任务书,开题报告,论文10000字,程序代码) 摘要 近年来,随着生活水平的不断提高,人们也越发关注自身的健康问题,运动健康已经成为了各个年龄阶段的人群,尤其是青年人,普遍关注的话题。同时,随着智能手机的大量普及与应用,健康计步类软件也有了很大的市场,各种https://www.2bysj.cn/Article/java/202101/21263.html
11.流行安全聊天APPTextSecure存在“未知密钥共享攻击”漏洞TextSecure是Android平台下的一款加密聊天APP,这款免费APP设计目的是为了保证通信隐私。这款APP由Open WhisperSystems开发,代码完全开源,支持端到端短信加密。看起来很安全是不?不过最近,来自德国鲁尔大学的安全研究员发现TextSecure存在“未知密钥共享攻击”漏洞。了https://cloud.tencent.com/developer/article/1036221
12.app软件开发策划书(精选10篇)长沙APP开发公司湖南艾尼科技认为,平衡业务驱动与真正的用户需求是很困难的。 在许多情况下,两者是彼此不相符的。 因此,用正确的信息武装你自己,以做出明智的权衡。 收集研究,如用户研究,专家意见和商业可行性以及技术可行性研究。 这种数据主体可被考虑以在用户为中心的移动APP解决方案和商业价值收益之间获取最佳平衡https://www.hrrsj.com/zhichang/cehuashu/673135.html
13.app开发平台有哪些?市面上的app开发工具有很多,但是常见的也就那么几个,当前主流的软件开发系统有,安卓(android)、苹果(iOS)、鸿蒙(HarmonyOS),这三大app系统的开发,对应的app开发平台也会不同,下面,小编就给大家逐个分析一下,安卓、鸿蒙、苹果系统的主流的app开发平台有哪些。http://www.apppark.cn/t-32302.html
14.安卓(android)毕业设计各种app项目2.头条校园资讯类app 3. 植物介绍、详情类app 4. 班费管理app 5. 少儿教育类app 6. 手机银行类app 7. 类似美团外卖app 8. 记账类app 9.学生宿舍管理系统 10.基于ssm的疫情物资管理系统 11、心理健康咨询app 等等等 。。。 说明:以下项目均使用Android studio开发,代码使用java语言,布局文件使用xml,后端接口https://www.jianshu.com/p/e3ec7866aeab
15.python和Java哪个开发app吗?Worktile社区3. 平台和目标用户:如果准备开发一个Android应用,那么Java是首选,因为它是Android平台的官方开发语言。如果你的应用需要在多个平台上运行,Python可能更适合,因为它具有更强大的跨平台能力。 综上所述,Python和Java都可以用来开发app,选择哪种语言取决于应用的需求和开发团队的技术栈。对于快速开发、小型应用或初学者来https://worktile.com/kb/ask/99872.html
16.AndroidApp开发入门与实战.pdf熊欣2020年版Android App开发入门与实战.pdf-熊欣-2020年版-人民邮电出版社,本书基于作者14年的开发实战经验,详细介绍了13套Android开发规范、3套热门App框架、12个常用功能模块、14套App解决方案,以及高效开发工具。最后,本书还以实训方式,展现了Github客户端开发的前前后后,作为https://max.book118.com/html/2020/1210/8013033020003025.shtm
17.2014年中国手机市场充满变革支持这两大平台的APP分别都超过了120万个,而排在第三的WP仅有24.5万个。应用越多,说明系统受欢迎的程度越高,市占率也会越大。但是iOS的市占率远小于Android,而应用数量却几乎相当,原因在于使用iOS平台的用户会更愿意掏钱购买APP服务,所以也刺激了开发者更倾向于开发iOS平台的APP。https://www.cac.gov.cn/2015-02/03/c_1114236220_3.htm
18.AndroidStudio开发实战:从零基础到App上线(第2版)中文PDF完整版电子应用平台:PDF 更新时间:2024-01-10 购买链接:京东异步社区 网友评分: 360通过腾讯通过金山通过 265MB 广告 商业广告,理性选择广告 商业广告,理性选择广告 商业广告,理性选择广告 商业广告,理性选择 详情介绍 Android Studio开发实战:从零基础到App上线(第2版)是一部Android开发的实战教程,由浅入深、由基础到高级,https://www.jb51.net/books/785182.html
19.开发app创新创业项目计划书(精选10篇)开发app创新创业项目计划书 1 【项目名称】: EduTech智学助手——个性化学习与教育资源整合平台 【项目概述】 在信息化时代,教育行业正经历着前所未有的变革。EduTech智学助手旨在通过先进的技术手段,为K-12阶段的学生、教师及家长提供一个集个性化学习路径规划、高质量教育资源整合、学习进度追踪与效果评估于一体的综https://www.yjbys.com/chuangye/ziliao/chuangyejihuashu/631239.html