写点什么

华为云 APM 非侵入式移动 APP 埋点技术分析

  • 2020-03-31
  • 本文字数:2204 字

    阅读完需:约 7 分钟

华为云APM非侵入式移动APP埋点技术分析

华为云近期推出重磅新特性——端到云全链路应用性能管理,其中,移动 APP 的数据分析是非常重要的一部分。与业内使用 SDK 的方式接入移动端数据不同,华为云采用的业界首发非侵入式接入“黑科技”,本文将分析华为云是如何做到的。

移动 APP 的发展

随着移动互联网的兴起,基于 Android 的移动 APP 数量呈现井喷式的增长。由此带动的不仅仅是智能手机行业的发展,而且带动了移动 APP 性能管理行业的发展。同时,越来越多的移动 APP 开发企业把目光投向了传统 APM 行业,希望传统 APM 企业能够提供移动 APP 的性能管理解决方案来减少企业的移动 APP 运维成本。

移动 APP 的运维困局

移动 APP 的运维不同于传统服务运维,由于移动 APP 运行在用户的手机上,开发者无法直接获取 APP 的运行状况,很难判断 APP 的用户体验。因此如果需要了解移动 APP 的用户体验,开发者一般会在业务代码中增加获取用户非隐私数据的代码,比如说获取 http 请求时延,获取 http 请求吞吐量等。但是这种方式将会极大的增加开发人员的工作,同时也需要开发者搭建一套处理运维数据的后台系统,这对于企业来讲成本开销很大。在本文接下来的篇幅中,我们会着重于讲解如何获取 APP 运行时数据。

侵入式 SDK 埋点

Android 为了更好让开发者收集 APP 运行时数据,提供了一个可以再代码编译期修改安卓运行字节码的解决方案,目前各大移动 APM 提供商使用的都是这套解决方案,通过修改字节码完成通用三方包的埋点来获取 APP 运行期数据。但是,这个解决方案依然需要开发者在编码阶段对业务代码进行修改,代码修改难度和修改量取决于 APM 提供商给出的 SDK 开发指南。可以说 SDK 集成的方式帮助开发者免去了搭建移动 APP 运维系统的烦恼,但是仍然需要开发者将 SDK 集成到业务代码中,从开发的角度讲,并没有真正减轻移动 APP 开发者的工作。

非侵入式埋点解决方案

为了进一步减少开发者的工作,华为独家提供了更加简便的非侵入式埋点解决方案。通过这个解决方案,开发者只需一个命令就能完成整个 APP 的埋点工作,无需 SDK 集成,无需编译发布,无需搭建运维系统。华为真正做到了移动 APP 埋点的非侵入式:一个命令行,解决所有问题。


非侵入式技术解密

  • 技术原理

  • 非侵入式埋点技术源自于 gihub 的 dexlib2 开源项目,而移动 APP 开发者熟悉的项目 apktool 使用的就是 dexlib2,实际上,dexlib2 就是 android 虚拟机 Dalvik 上的字节码解析库。它提供了将 Dalvik 字节码翻译成 smali 汇编码的方法,同时也提供了将 smali 汇编码打包成 Dalvik 字节码的方法。


我们通过深入研究提出了一套基于 dexlib2 解析库的非侵入式埋点框架。基本原理就是通过 dexlib2 将开发者已经生成 apk 进行字节码翻译成 smali 汇编码,在翻译的过程中对指定的代码进行埋点,达到非侵入式埋点的效果,最后通过 dexlib2 重新将开发者的 apk 进行打包还原,完成整个 apk 的埋点。而在整个过程中,开发者完全不感知埋点过程,也不感知任何代码变化,同时经过我们的精心优化,埋点后的代码对于整个 APP 业务影响非常小,可以忽略不计。


最后,埋点过后的代码也支持开发者使用 apktool 工具进行查看和验证,开发者可以清晰的看到所有代码的改动之处,完全透明。


下面是业界通用的 SDK 埋点采集和我们非侵入式采集的对比图:



  • 技术框架

  • 基于 dexlib2 开发的非侵入式开发框架支持开发者通过配置文件自定义埋点类型、埋点包以及埋点函数。可以说,开发者可以根据配置文件来定义整个埋点过程。下面的示意图展示了我们非侵入式埋点的架构设计:



可以看到,上述架构设计下的非侵入式埋点框架自由度非常灵活,拥有无限扩展和自由定制的能力,所有的三方开源包都支持可插拔。用户可以通过配置文件自由选择自己想埋点的三方包,函数和埋点类型。我们甚至可以很轻松的接纳某些特殊用户的定制类需求。


截至目前,我们已经开发出来的插件包括:Okhttp,Okhttp3,Volley,HttpUrlConnection 等,后续插件还在努力研发中。


为了获取三方开源软件中的运行数据,非侵入式数据采集框架是通过不同埋点类型来获取的,具体介绍如下:


1.环绕型埋点:在关键函数调用点增加 before 和 after 函数,获取函数调用前后的参数变化,返回值等信息。


2.Getter/Setter 型埋点:对私有类型的类成员变量增加 getter/setter 函数,获取 APP 运行期关键数据信息。


3.函数入口型埋点:在关键函数第一行增加调用配置文件指定的静态函数,用来统计函数入口相关信息,同时也可以对函数参数注入跟踪信息。


4.函数替换型埋点:将所有关键函数的调用替换为配置文件指定的静态函数,为用户提供灵活的关键函数 mock 能力。


使用上述四种埋点类型,我们基本上可以获取三方开源库中的任何数据,不仅如此,我们还可以根据客户的要求来定制更多的埋点类型, 只有客户想不到,没有我们做不到。通过非侵入式埋点框架,我们可以将移动 APP 的运行状态纤毫毕现的呈现给开发者。


目前,非侵入式埋点技术已经在华为云 APM 的 Mobile 监控中使用,已经历实际工程的考验,希望大家可以多多关注。

结语

一切都是为了更好的服务消费者,华为始终以客户为中心的价值观永远不会变,我们对开发者提供的非侵入式埋点框架和运维系统就如同一套顶级的体检系统一样,将使用权完全的交给开发者,开发者通过最简单的使用方式,最强大的数据采集方式与数据分析系统来完成移动 APP 的诊断和体检。


本文转载自 华为云产品与解决方案 公众号。


原文链接:https://mp.weixin.qq.com/s/XZEHjA_w_YJgCrYCfGe5Tg


2020-03-31 14:451748

评论

发布
暂无评论
发现更多内容

强大Raw格式图像ps插件Adobe Camera Raw for Mac中文激活

小玖_苹果Mac软件

ATB是什么?

zjun

CANN Ascend 大模型推理

智能加氢站站控系统(源码+文档+部署+讲解)

深圳亥时科技

AscendC从入门到精通系列(三)基于自定义算子工程开发AscendC算子

zjun

算子 CANN 昇腾 AscendCL Ascend

SD云端部署哪个好?适合SD部署的桌面云工作站

青椒云桌面

云桌面 sd云端部署 云工作站

3D渲染与动画制作的创意利器 KeyShot 2024 for mac中文激活版

小玖_苹果Mac软件

Bodymovin for Mac (AE动画导出json工具) v5.12.1英文激活版

小玖_苹果Mac软件

Axure RP 10 for Mac中文激活版:高效原型设计软件

小玖_苹果Mac软件

Antares Auto-Tune Pro for Mac(音调校正) 11.0 激活版

小玖_苹果Mac软件

开源云原生数据仓库 ByConity测试

多啦A梦

ByConity

如何使用Ascend的ATB加速库?

zjun

CANN Ascend 大模型推理

AIGC对本地配置要求高吗,云桌面如何实现一键镜像?

青椒云桌面

AIGC云桌面 AIGC云电脑 sd云端部署

AscendC从入门到精通系列(一)初步感知AscendC

zjun

算子 大模型 CANN AscendCL Ascend

蓝宝石插件套装Boris FX Sapphire mac激活版 支持AE PS AVX OFX等

小玖_苹果Mac软件

Microsoft Remote Desktop for Mac:跨平台远程桌面连接利器

小玖_苹果Mac软件

强大三维模型渲染和动画插件 Video Copilot Element 3D for Mac激活版

小玖_苹果Mac软件

AscendC从入门到精通系列(四)使用Pybind调用AscendC算子

zjun

算子 CANN 昇腾 AscendCL Ascend

AscendC从入门到精通系列(五)调用基于工程开发AscendC算子

zjun

算子 CANN 昇腾 AscendCL Ascend

Navicat Premium 15 for Mac:强大数据库管理和开发利器

小玖_苹果Mac软件

淘宝图片搜索接口(Taobao.item_search_img)

tbapi

淘宝API接口 淘宝拍立淘接口 淘宝图片搜索商品接口

Ascend推理组件MindIE LLM

zjun

推理模型 Ascend 大模型推理

ATB概念之:算子tiling

zjun

CANN 数据切片 Ascend 大模型推理

如何在c++侧编译运行一个aclnn(AOL)算子?

zjun

算子 大模型 CANN 昇腾 Ascend

AscendC从入门到精通系列(二)基于Kernel直调开发AscendC算子

zjun

算子 CANN 昇腾 AscendCL Ascend

原生APP外包开发流程

北京木奇移动技术有限公司

APP开发 软件外包公司 APP外包公司

ATB算子实现原理解读

zjun

CANN Ascend 大模型推理

华为云APM非侵入式移动APP埋点技术分析_行业深度_华为云产品与解决方案_InfoQ精选文章