项目实战 - 混合式App开发

为何要使用混合式开发?

要说为什么使用Hybrid App 【混合式开发】,就要先了解什么是Native App【原生程序】, Web App【网站程序】。

Native App
是专门针对某一类移动设备而生的,它们都是被直接安装到设备里,而用户一般也是通过应用商店来获取应用 。 如安装在 iOS 和 Android 设备上的客户端。

Native App
体验效果很好,但是有一个缺点,如果新增或更改某个功能的话,需要频繁的升级,导致版本维护很难。

Web App
一般说来,移动Web App都是都是需要用到网络的,它们利用设备上的浏览器(比如iPhone的Safari)来运行,而且它们不需要在设备上下载后安装。

Web App
如果升级一个功能,只需要后台更新即可,不需要用户端做什么事情,但是它的缺点是权限很低,不能操作用户端设备的信息。

Hybrid App
是指介于web-app、native-app这两者之间的app,它虽然看上去是一个Native App,但只有一个WebView,里面访问的是一个Web App,如掌上百度和淘宝客户端Android版,走的也是Hybrid App的路线,不过掌上百度里面封装的不是WebView,而是自己的浏览内核,所以体验上更像客户端,更高效。

结论
“Hybrid App同时使用网页语言与程序语言开发,通过应用商店区分移动操作系统分发,用户需要安装使用的移动应用”。总体特性更接近Native App但是和Web App区别较大。只是因为同时使用了网页语言编码,所以开发成本和难度比Native App要小很多。因此说,Hybrid App兼具了Native App的所有优势,也兼具了Web App使用HTML5跨平台开发低成本的优势。

项目开发

开发中用到的关键技术

AngularJS:js框架,用于开发网站应用,详细的请看之前写过的文章。

PhoneGap:用于js和客户端交互,详细原理请看 phonegap 框架详解

调试流程及工具(安卓系统)

  1. 初步调试,适用于功能开发阶段,调试工具:Chrome浏览器
  2. 查看AngularJS数据,工具:Chrome插件 -> AngularJS Batarang
  3. 集成到客户端中调试,使用Chrome自带功能,chrome://inspect ,此功能需要FQ,且安卓系统版本大于4.4
  4. 低版本兼容性问题,使用weiner库

问题解答

问题: 在chrome://inspect中不显示我连接的手机
原因: 检查一下,手机是否连接成功,是否已经安装了adb调试工具,是否开启开发者模式,启用usb调试功能 。具体调试操作可以看 移动端Web开发调试之Chrome远程调试(Remote Debugging)

问题: 怎么开启usb调试功能
原因: 原版手机系统请查看 如何打开USB调试模式,如果是华为或小米 需要先点击版本号,开启“开发者模式”,每个品牌的手机,开发者模式选项的位置都不相同,如果找不到,请自行百度【百度关键字:小米 开启usb调试模式】

问题: 使用chrome://inspect点击inspect按钮,页面出现空白
原因: 第一次使用此功能时,谷歌浏览器会向服务器发送请求,获取相应数据,由于请求被墙了,导致数据加载不了,导致空白页面,怎么解决,你懂得。

问题: 使用chrome://inspect有时调试不了
原因: 只有debug版本才能调试,看你打的包是不是release版本的apk。

问题: js添加了PhoneGap之后,和客户端交互的功能没有响应
原因: 一、确认代码确实走到调用客户端的代码那里并且执行了相关代码,二、看一下是否是js写的有问题,如本地客户端的函数名和js调用的函数名不同,三、是否是客户端的权限没有配置

问题: 集成了PhoneGap后,如果程序立即执行,客户端交互程序有时会直接报错
原因: 这是因为你在PhoneGap还没初始化好的时候就调用PhoneGap插件了,解决此问题需要,把 <html ng-app="mainApp"> 改为 <html id="mainApp" > 并且需要在js修改为手动初始化AngularJS

///// deviceready之后在开始执行angular
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    var domElement = document.getElementById('mainApp');
    angular.bootstrap(domElement, ["mainApp"]);
}

问题: 修改成 deviceready 之后,在页面中就调试不了了,怎么办
原因: 在网页中调试时,你把ng-app="mainApp"加上就可以了

问题: 程序员哥哥,再问最后一个问题,你为什么那么帅,那么有气质呢
原因: 很多人也都说我漂亮的不像实力派,我只想说:当才华与美貌并存的时候,我希望你看重的是才华!

如果你的视野只局限于技术,你也许是一个好的开发者,但也仅仅是一个好的开发者

posted @ 2015-09-29 15:43  远浪  阅读(10487)  评论(5编辑  收藏  举报