您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Android应用开发之Hybrid
 
来源:blog 作者:longsam 发布于:2016-9-14
  1450  次浏览      32
 

什么是Hybrid?

从用户的角度来看,Hybrid的app和native的app并没有明显的区别。他们从app store下载或安装apk,打开app开始使用,这一切都是一样的,而且两者都包含各种类型的应用,游戏、社交、电商等等。最重要的是,用户根本不关心你是Hybrid还是native,他们只想要安装一个自己喜欢的应用,并开始使用。

Native与Hybrid的本质区别是构建方式的不同,这些不同主要体现在应用框架和语言两方面。

Android Native所使用的语言大家都知道,主要是Java,某些情况下还有C/C++。而Hybrid除了Native所要用到的语言之外,还需要要Html、javascript、css等。至于哪种类型语言用的多,要看开发者选择混合(Hybrid)的形式和比例。既然Hybrid开发需要更多的语言方面的知识,那为什么还有那么多主流开发者和公司对之推崇呢?后面会做更详细的介绍。

对于框架,Native使用的是标准的android sdk,Hybrid其实也是处于android sdk之上的,只不过加了一层更适合web开发的中间层。现有的Hybrid框架主要有,Crosswalk, Cordova,PhoneGap等。

为什么使用Hybrid?

一般来说,如果我们开发的app要发布到各个移动平台,并且都是采用native开发的话,那么我们就需要熟悉各个平台sdk与语言的技术人员;如果采用Hybrid方式的话,那么使用web技术开发的页面代码就可以在各个平台共用。不过要注意的是,如果native向web层提供了一些自定义的插件,就需要确保各个平台接口定义的统一性,否则web代码在不同平台上无法正常工作。

另外,很多时候开发相同的页面使用web技术会比native更加节省时间。

当然,使用web技术并不总是好的。首先是性能问题,一般web技术开发的页面总是比native开发的运行要慢的,这是web的一块很大的硬伤。不过随着目前硬件和浏览器引擎性能的不断优化,在体验上两者的差距会越来越小,这也是hybrid或纯web能够发展起来的重要原因之一;另一方面,在接口的全面性和能力上,web层也是没有native层丰富的,不过这个问题可以通过打通web层和java层的接口来解决。总的来说,对于那些实时性要求较高或者过于复杂的页面还是需要采用native来写。

Hybrid有哪些方式?

Hybrid的开发方式大概有两种大类型,不使用框架和使用框架;而使用框架又可以分为native混合和web混合。

不使用框架是指开发者直接面对标准的android native接口自己来实现web页面,一般情况下主要是利用webview及其相关接口,某些情况下还会使用第三方框架提供的嵌入式类webview模块,比如Crosswalk框架的XWalkView。这种的方式的优势是灵活性较大,开发者可以任意组织自己的h5代码和native代码。比较适合对native比较熟悉,能够掌控上下层各种细节的开发者。

native混合是指,使用的框架让开发者主要面对native相关开发,而把web作为附属。这种方式和不适用框架有些类似,只不过其中的web采用了框架而已。适合对native比较熟悉,但又想借助web框架的高效性的开发者。

web混合是指,使用的框架让开发者主要面对web相关开发,而把native作为web的插件来提供。这种适合对web更加熟悉,并且主要页面都采用web开发的情况。通知这种方式也是未来的主流方式。

目前很多hybrid框架,比如crosswalk,cordova等都提供了native混合和web混合两种开发模式,开发者可根据自身及公司情况来选择。

不使用第三方框架

这种方式同时需要android native开发技术与web开发技术。本文不对native或者web作更多的深入讨论,而是将焦点集中在两者结合的部分。

首先,使用native方式定义一个activity或者fragment,其中的布局文件包含WebView。该webview就是显示我们的web页面的核心控件。下面是一个demo的布局文件:

然后,在activity或者fragment获取WebView实例并初始化。这里的初始化涉及到,web view的各项能力,开发者需要根据自身的需求来设置。比如对javascript的支持,对viewport的支持等。更详细的细节可以查看WebView和Web app best practice。下面是一个设置web view的例子:

该例子中,“mUrl”代表要加载的URL。另外,页面跳转使用native的startActivity来多次实例化MainActivity;这种方式可以让web页面之间的跳转具有类似native的体验,比如定制各种页面切换动画等,当然,开发者可以选择使用web的location.href。

第三,在assets中添加我们的web代码,可以只用javascript、image、video、css等。下面是一个demo的web代码目录结构:

其中page1.html的代码如下:

最后,demo程序的运行效果如下:

本demo的代码可从Github上下载。

Cordova/PhoneGap

Cordova算是Hybrid界的一个核心,是大名鼎鼎的phoneGap的主要驱动框架。除了PhoneGap之外同时有很多其他可与其协作的工具集,比如“ionic”、“crosswalk”、“Framework 7”等,可以说是支撑起了hybrid的主要生态。

Cordova主要特性:

1. web引擎可替换。这一点保证了其运行时有极大的灵活性,比如默认情况下cordova会采用系统自带的webview,而该控件在android 4.3以前表现非常差,所以可以将运行时替换为crosswalk, crosswalk可以将最新的chromium引擎打包进apk从而为所有4.1以上的android设备提供统一的UI渲染和高效的js执行性能。

2. 丰富的native插件,拥有丰富的插件共享库,并且开发者可以定制自己的插件。

3. 轻量级,核心框架非常紧凑,可以说只提供web和native的粘合剂,但是通过与其他优秀的框架结合使用,比如Framework7, agular.js等,可以灵活地满足开发者的需求。

PhoneGap是cordova最流行的一个发行版,它的核心是cordova,除此之外还提供了一些方便的调试和build工具。如果把cordova比作linux内核的话,PhonaGap就相当于Ubuntu或者Redhat等。

PhoneGap提供测主要工具有,GUI开发工具(适合喜欢图形界面的开发者), 浏览器端或手机端图形化调试工具(不需要build成apk即可实时查看正在编写的web页面效果),云端build(开发者不需要在本地安装android sdk)等。

对于喜欢纯命令行或者自己定制开发工具的开发者来说,推荐直接使用cordova,cordova也具有更大的灵活性。不过一般我们开发移动端app时,都希望实时看到web页面的效果,所以对于大多数情况还是推荐从PhoneGap入手。

Cordova官方地址:http://cordova.apache.org/

PhoneGap官方地址:http://phonegap.com/

Crosswalk

Crosswalk是Intel Open Source Technology Center出的一个Hybrid框架。该框架以chromium引擎为核心,使用该框架app的web运行时不使用android系统自带的webview控件以及底层的渲染引擎,而是Crosswalk自己的引擎。开发者可以选择将crosswalk运行时直接打包进apk,也可以选择app在第一次运行时从远程加载。前者会导致打包的apk较大,比一般的大25MB左右;后者会导致第一次运行时加载比较慢。两者都不是很完美,不过Crosswalk也有自己的优势。

首先,使用crosswalk运行时可以保证在不同的android设备上拥有一致的UI渲染,同时chromium引擎的高性能可以保证js执行效率比其他框架高出一大截。对于android 4.1 ~ 4.3的设备而言,因为系统还是采用webkit内核,所以web的渲染和执行效率严重不足,而crosswalk则可以解决这个问题。

其次,crosswalk可以保证与chromium的同步更新,开发者可以及时的用到这个优秀引擎的许多最新特性。

结论

如果对于性能要求变态,想要精确控制内存网络等,推荐纯native开发。

Hybrid的另外一个问题是,在大部分情况下,移动端的用户已经习惯了native的风格的交互习惯,如果我们还想传统PC web那样写页面,很可能用户不会买账;而且传统的web页面风格在移动端确实体验不是很好。这就导致我们的设计人员和开发者必须用web技术来写出类似native的交互体验。

虽然,从零开始的用CSS也能写出类似native的效果。但是,要将整个应用的所有页面都实现成一整套比较协调统一的native风格还是需要花费巨大精力的。所以,hybrid开发时,我们需要适合移动端的web UI框架。目前比较出名的有Framework 7, ionic,telerik, onsenui, famo等。

关于各个框架的优劣,本文不做过多的介绍。不过,从UI的风格,成熟度,使用量来看本文推荐Framework 7。

   
1450 次浏览       32
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新活动计划
嵌入式软件架构设计 12-11[北京]
LLM大模型与智能体开发实战 12-18[北京]
嵌入式软件测试 12-25[北京]
AI原生应用的微服务架构 1-9[北京]
AI大模型编写高质量代码 1-14[北京]
需求分析与管理 1-22[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   

Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合

领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...