移动端前端开发调试

通过移动端使用 Web 服务的比率越来越大,例如淘宝今年双十一,移动端交易份额就达到 42.6%。由此可见,掌握移动端的前端开发和测试是非常有必要的。

本文只介绍与调试有关的内容,至于其他移动端开发知识(技巧、坑)太多太大,推荐 Mars 移动前端开发知识库。这个项目很久没有大动静了,欢迎大家猛烈关注,不要让它“太监”了。

由于本文还会不断更新、补充、修正,故在此给出原文连接,以便查看最新版本:http://yujiangshui.com/multidevice-frontend-debug/

响应式测试

响应式现在基本是中小型项目的标配了,先来谈谈响应式测试技巧。

基础的响应式测试

响应式的测试特别简单,通过改变视窗大小(也就是缩放你的浏览器)即可测试。当然,你的 CSS 中 Media Queries 判断条件设置时要使用 max-width 才行,如果使用 max-device-width 则会根据你设备的屏幕尺寸来判断。区别详情请看 这里。

对于 Chrome 浏览器,你可以将 Chrome DevTools 放在右边,这种布局方式尤其适合用在外接的大屏幕上。然后通过拖动 DevTools 快速测试响应式的显示效果:

优点就是对于 Chrome 开发者可以快速查看响应式变化效果。缺点就是分辨率尺寸不会很精确,因为它的页面宽度是添加了滚动条之后的宽度,这样对 Media Queries 的临界值效果不好测试。

对于 Firefox 浏览器,不愧是早期开发的必备神器,它早就内置了响应式测试工具,可以通过 Firefox 工具 -》Web 开发者 -》自适应设计视图 启用:

可以设置分辨率等参数,以及模拟 touch 事件、屏幕截图等功能,可以随意拖动。足够简单和流畅,很方便测试响应式的变化效果等。对于基础的响应式测试以及临界值变化情况测试,强烈推荐 Firefox 浏览器。

由于响应式测试太简单,于是有了一大堆的书签栏 JS 工具或者 Chrome 扩展,并且以很多交互特效、复杂的功能来吸引用户。实际上使用起来,你可能需要依靠网络才能使用,还会遇到切换缩放不够流畅、刷新不方便等等问题,在这里不推荐。

Chrome 模拟设备尺寸

如果你需要测试某种明确的机型,Chrome 新版的 Emulation 就可以派上用场了。Emulation 现在变成了一个手机图标(),之前的 Emulation 面板被放在了 DevTools 的分裂视图中了,如果你怀念以前的 Emulation 面板或者需要模拟地理位置、加速计等功能,在 DevTools 界面摁下 ESC 即可打开分裂视图。打开 DevTools 之后,点击这个“手机图标”即可进入 Chrome 手机模拟器:

在 Device 你可以选择预置的设备,快速切换分辨率和屏幕有关参数。此外还可以设置分辨率比率,来模拟 Retina 或者更高级屏幕下的效果,这样可以测试你的响应式图片是否被正确替换等。它甚至提供了网络测试,来测试低网速情况下你的页面加载情况。慢网速的测试,往往需要用抓包工具(Charles 等)来模拟,现在用 Chrome 也可以模拟了。

除此之外,Chrome 的手机模拟器还提供了非常非常多的实用功能,比如模拟 touch 事件、捏等手势操作、地理位置、加速计、Retina 等等,详情请见 官方文档,英文不好的朋友可以看我的 翻译版本。节约篇幅,这里不再赘述。

这里的方法仅能作为基础的响应式测试,对于中小型、比较简单的项目,完全足够用了,对于稍微复杂的页面,还是需要用虚拟机或者真机测试,这样更加可靠。

基于 Android 的移动端前端开发调试

Android 系统是份额最大的移动端设备操作系统。一方面,Android 是 Google 开发的,浏览器等也是基于 Blink 内核(早期版本基于 Webkit ),都是 Google 开发的,所以技术上应该是没有问题的。另一方面,Google 无偿开源 Android 系统,结果导致很多小厂商自己乱改 Android 系统,各种版本遍地生花,各种 BUG 层出不穷。

Android 虚拟机测试

在电脑上安装 Android 虚拟机,就可以用虚拟机打开进行测试。一般推荐两个:

Genymotion

Genymotion是一个很棒的 Android 虚拟机。但是首次安装配置需要麻烦一些。由于基于 VirtualBox 内核,所以要先安装 VirtualBox,然后需要注册账号 Genymotion,可以免费使用,但是有功能限制。如果遇到重要的项目,临时买一两个月高端账号也是 OK 的。

安装完成,登陆之后,选择 Android 版本和手机型号,即可下载对应的虚拟机包,下载好的虚拟机会显示在列表中,你可以选择开启。

安装好的虚拟机与你 Host 本机处于一个局域网,这样你就可以用 BrowserSync 之类的,开启一个局域网 IP 本地服务器,在移动设备上同步测试了。关于 BrowserSync,如果你没接触过,下面有讲。

比较蛋疼的是,Genymotion 虚拟机里面安装 APP 好像比较麻烦,安装 Chrome 不太方便,这样不方便连接桌面版 Chrome 进行调试,只能使用 Weinre 调试。如果你有 Genymotion 使用这方面的经验欢迎分享。

Parallels

Parallels 是基于 Mac 平台的虚拟机,使用它创建虚拟机的时候,可以直接下载 Android 系统并安装,超级傻瓜的操作,但是超级好用。

没错,它还可以装 Chrome OS,只需要点击一下等待下载即可。

其他虚拟机软件应该也可以实现,不如这两种好用,如果这两种你无法使用,可以自行搜索选择其他方法尝试。Win 系统可以直接安装 Android SDK 也可以通过虚拟机方式,这里不再赘述。

安装完虚拟机,就可以用里面的浏览器打开网页进行测试了,虚拟机与本机处于一个局域网,可以用局域网 IP 来调试本地页面。

虚拟机不是真机,但是要比直接用浏览器测试强一些,在桌面操作比较方便,还可以安装多个版本测试。

Android 真机调试

桌面端的前端开发调试非常简单,因为有 Firebug、Chrome DevTools 等工具,直接右击打开就可以看到元素的 CSS,并且可以查看各种资源、修改运行调错 JS 等。而移动端浏览器显然没法带有这些功能,于是可以用数据线连接设备,然后用电脑上的 Chrome DevTools 来调试移动设备上的页面。

首先,你的 Chrome 版本必须高于 32。其次你的测试机 Android 系统高于 4.0,测试机安装 Chrome for Android 才可以使用 Chrome 远程调试这项功能。

先用数据线将 Android 测试机连接到电脑上。需要打开测试机上面“开发者选项”中的 “USB 调试”功能。在 Android 4.2+ 系统上“开发者选项”默认是隐藏的,所以你需要先开启“开发者选项”(开启方法:设置 -》 关于本机 -》 猛击版本号(Build number)多次 即可开启开发者选项)。之后如果没有开启,或者没有反应,可能是你的版本问题或者点击错了,你可以尝试把 关于本机 上所有的选项都猛击几次,就会开启。

然后在桌面版 Chrome 打开 chrome://inspect 即可查找你的设备,在设备上的 Chrome 打开网页,即可看到,然后就可以在桌面版 Chrome DevTools 调试移动设备上的页面了。

此外,还可以直接在桌面版 Chrome 输入 URL 在移动设备上打开;在本地用 Nodejs 或者其他功能开启一个本地服务器,用端口转接让移动设备直接访问本机 localhost 上的页面,再配合 LiveReload、BrowserSync 之类的工具,自动刷新,测试简直爽歪歪。

更多细节不再赘述,可以查看 Remote Debugging 官方文档 或者我的 翻译版本。

Android WebView 前端开发调试

现在越来越多的移动端 APP 是 WebView,因为开发方便,更新快捷。那么就会有调试 WebView 的需求,因为他们本身就是网页。

基于 Chrome 的调试

在 Android 4.4(KitKat)或者更新版,你可以使用 DevTools 来调试原生安卓应用中的 WebVies 内容。

不过需要在你开发的应用中,添加有关代码才可以启用 WebView 的调试,这里比较有局限性,有兴趣的朋友可以参照 官方文档 或者我的 翻译版本 试下,这里不再赘述。

使用 Weinre 调试

Weinre 是一个相当简单好用的调试工具。它会在你本地创建一个监听服务器,并提供一个 JavaScript,你只需要在需要测试的页面中加载这段 JS,就可以被 Weinre 监听到,在 Inspect 面板中调试你这个页面。

目前 Weinre 也发布到 NPM 上了,Mac 下具体使用方法如下( Win 的同学请参加:远程调试工具-weinre):

首先安装 Weinre:

npm install -g weinre

安装完成之后,要在本地开启一个监听服务器,需要获取本机的局域网地址:

  • Mac 在终端执行 ipconfig getifaddr en0 命令。
  • Win 在命令行执行 ipconfig 命令。

这时候拿到一个 IP,就本例而言,我的 IP 为 10.189.249.254,这时候执行:

weinre --boundHost 10.189.249.254 

开启本地监听服务器。

这里有一个网址,就是 Weinre 的一些说明,我们可以打开看下:

这里最重要的是箭头所指的 

你可能感兴趣的:(移动端前端开发调试)