@nextleaf
2018-12-08T00:48:58.000000Z
字数 2602
阅读 1076
毕业设计
目前App的开发主要包含三种方式:原生开发(Native development)、HTML5开发(Web development)和混合开发(Hybrid development)。
原生应用开发,是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发。比如android是使用kotlin或java语言并建议利用Android Studio进行开发,IOS是利用Objective-C语言和Xcode工具进行开发。由于原生应用利用的是官方提供的语言和工具并且能够直接操控硬件设备(比如多点触控、NFC、读取短信等),在应用性能上和交互体验上应该是最好的,但是原生应用的可移植性比较差,特别是一款原生的App,Android和IOS都要各自开发,同样的逻辑、界面要写两套。
HTML5应用开发,是利用Web技术进行的App开发,我们知道web技术本身需要浏览器的支持才能进行展示和用户交互。主要用到的技术是HTML5、JavaScript、CSS等。可以利用现有的一些开发框架和技术,比如phoneGap、bootstrap、jquery等。H5开发的好处是可以跨平台,编写的代码可以同时在Android、IOS、Windows上进行运行。由于Web技术本身的限制,H5移动应用不能直接访问设备硬件和离线存储,所以在体验和性能上有很大的局限性。
混合应用开发正是结合原生和H5开发的技术,取长补短的一种开发模式,原生代码部分利用WebView插件或者其它的框架为H5提供了一个容器,程序主要的业务实现、界面展示是利用H5相关的Web技术进行实现的。比如现在的微信、京东、淘宝、今日头条等都是利用的混合开发模式。
根据指导老师的提示,可以使用App混合开发(Hybrid App)技术来开发此项目,在网上检索了相关资料后,决定使用混合开发,原因是除了混合开发的优点外,就是我并没有学习过Objective-C语言,Android课程虽然选修过,但用于安卓开发的指定官方语言Kotlin也并没有学习过,因而原生开发需要我学习大量课外知识并耗费大量开发资源。好在在安卓平台上,Kotlin语言与Java相似,并且我也熟悉HTML、JavaScript等web技术,故而选择混合开发,以提高开发效率,节省资源,同时又避免了HTML5移动应用的局限性。
App混合开发,是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为HTML5来开发,即利用了原生的开发技术还应用了HTML5开发技术,是原生和HTML5技术的混合应用。
App混合开发的优点是:
1、开发效率高,节约时间同一套代码Android和IOS基本都可用
2、更新和部署比较方便,不需要每次升级都要上传到App Store进行审核了,只需要在服务器端升级就可以
3、代码维护方便、版本更新快,降低产品成本
App混合开发的缺点是:
1、由于不能直接操控硬件有些方面性能不是很好
2、技术比较新的版本的兼容性比较差。
混合App开发是未来的趋势,目前混合开发中使用的技术也很多,主要的混合开发技术有jQuery Mobile、React Native、Cordova、APICloud、AppCan等。虽然混合开发能够提高效率节省成本,但也有很多的限制,除了硬件、缓存等的限制,各大平台之间的兼容性也不足。有的也比较消耗资源。
App混合开发的关键问题是HTML5页面与Native App之间的交互
在安卓平台上,WebView支持js和Java相互调用,所以HTML5页面与Native App之间的交互通常是使用js来调用native代码,不过WebView的这个功能在Android 4.2(API 17)一下存在高危的漏洞,出于安全考虑,Android 4.2以后的系统规定允许被js调用的Java方法必须以@JavascriptInterface进行注解。
针对这个漏洞,可以使用开源的解决方案Cordova,也可以用另一种比较轻量级的开源的解决方案“safe-java-js-webview-bridge”,后者解决方案的实现和配置比Cordova简单,我考虑在项目中使用它。
dependencies {
compile 'cn.pedant.safewebviewbridge:library:1.4'
}
调用摄像头,Native开发能够简化拍照的过程,而W3C正在开发一个访问摄像头的API,但现在还没有将这部分工作正式整合到浏览器中,不适合js调用摄像头。
其他待定
将来可能使用Flutter(Flutter是谷歌的移动UI框架,可以在iOS和Android上构建原生用户界面)进行开发。Flutter的使用需要连接到Google。
是否可以将Flutter项目导出为原生安卓项目或原生iOS项目,这样就可以在导出的项目上进行二次开发,从而重构为混合模式移动应用(Hybrid App)?
AppCan、Appcelerator、Kerkee、APICloud、PhoneGap、NativeScript(百度百科)
Cordova(比较重的框架,配置较多)
ionic(需要学习Angular,AngularJS 是一个 JavaScript 框架),这个考虑在项目中使用。
腾讯VasSonic
JSBridge(基于url scheme)
参考文献:
[1] 凡梦_.浅谈App原声开发、混和开发及HTML5开发的优劣[EB/OL].2017[2019-01-07].https://blog.csdn.net/mpegfour/article/details/78171150.
[2] Android小码农.谈谈App混合开发[EB/OL].2017[2018-01-07].https://blog.csdn.net/s13383754499/article/details/78869683.
要学习的新技术还是很多的,所以此项目开发的过程必然是边学习边开发的过程。