套餐虽然优惠,流量还是很贵,对用户而言网络流量就是钱呐!用户习惯打开系统自带 APP 流量统计功能(如下),从 APP 的角度,总不希望用户一眼看出自家的 APP 是流量大户,所以有必要花时间知道 APP 的流量怎么流失的。但是系统的流量统计功能只是很粗略的对每个 APP 消耗的流量总量(分时)进行统计,但是程序员需要对 APP 的流量进行更精细、多维度的分析,从而有针对性地优化 APP 数据流量。

https://testerhome.com/uploads/photo/2018/6b00964e-6816-42c5-aea1-236ee57005ec.png!large

Android 流量测量常用方法

Untitled Database

注:鹅厂的 GT 性能测试工具的流量测试方案其实就是以上三种方法的汇总,也就仅仅能获取某段时间内被测应用的 流量大小和趋势 ,以及 GT 对 Wireshark 封装进行抓包,抓的是通过手机网卡的全部数据流量,却不能分析单独应用的流量情况。所以说鹅厂的 GT 工具对于手机应用流量只是停留在获得应用流量,拿下来看看的阶段,并不能提供行之有效的流量优化指导策略。

基于插桩的精细化分析

以上列举的几种流量分析方法,或是简单粗暴统计流量,开发者依然找不到耗费流量的程序代码;或是抓包,配置繁琐易错,二次开发成本高,实现自动化的代价高。理想情况下,开发者自行在源代码中打点,记录所有网络请求的起始结束以及流量消耗,然后分析 log,但是手工打点显然是要命的。代码 插桩 从底层彻底解决了这些问题,根据规则对 APK 的字节码( Dex 文件)进行修改,模仿人工,在 APP 每次发送的 HTTP 请求的地方插入监控代码,运行时采集请求数据,并分析流量。详细原理请看: ‣

Appetizer 就是业界为数不多能够稳定应用插桩技术的工具,通过 插桩监控 http 请求 并进行精细化的正确性、性能、流量等多维度分析,支持基本所有的主流 http 库,事实上绝大多数的库都是对一些基本 http 库的再次封装(尤其是那些所谓的快速开发框架,基本都是用了 okhttp 来做 http 请求的)。所以 Appetizer 通过截获底层的这些库来支持包括 HttpURLConnection, Apache HTTP client, okhttp 2/3,retrofit, volley 等。同时 https 是完全可以截获的,不同于抓包工具,抓包工具的底层原理是网络代理,而 https 的设计是防止代理软件看到请求内容,所以抓包工具需要额外配置伪造的证书等等麻烦的事情;而 Appetizer 的底层原理是 打点 ,采集的数据好比在源代码里面能看到的数据一样,没有这个问题,https 请求的内容可以完美抓到。

使用 Appetizer 进行插桩分析的方法很简单,上传 apk,插桩,下载插桩后的 apk,然后在设备上跑,完成后通过 Appetizer 分析,生成测试报告。具体例子,请戳

五分钟快速入门

每次分析会产生一个分析报告,点击打开:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6ccb148f-8f41-4dcd-b6c7-9d486f00af23/Untitled.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/47d8620e-bffb-4cb5-a51e-c9a2c716a4d2/2019-08-20_10-32.png

点击进入流量分析界面,横轴是时间,纵向是分类标准,一个点代表一个 http 请求,大的代表流量大,支持左右拖拽以及滑轮缩放,上方有六种分类标准辅助流量分析

https://testerhome.com/uploads/photo/2018/af734b02-3d10-4aaf-806a-f7d9c46e6110.png!large

点击图中某个点,可以查看对应网络请求的详细信息

https://testerhome.com/uploads/photo/2018/ac80cc26-11ac-42b8-961c-fcbf67278e24.png!large

寻找流量杀手并优化

既然是对流量进行分析,很自然的,我们需要知道 APP 进行网络请求的域名、以哪种方式发送与接收数据、数据类型等。Appetizer 提供的精细化流量分析从不同的维度解析 APP 网络流量,从不同角度建议优化策略。