写点什么

华为云 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:451830

评论

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

华为负一屏全新体验,实时状态让服务快人一步

最新动态

技术分享 | Selenium多浏览器处理

霍格沃兹测试开发学社

app测试中常用的Android模拟器

霍格沃兹测试开发学社

私有化部署企业IM即时通讯:提升效率、防止泄密、高效协同办公

BeeWorks

从海光看国内芯片行业崛起:技术研发是增长关键

打工人!

芯片 芯片行业 海光

HDC.Together 华为开发者大会还有干货,开发者主题演讲明日举行

极客天地

技术分享 | 白盒测试方法论

霍格沃兹测试开发学社

appuploader不是开发者账号

城市与AI,正待济沧海

脑极体

AI 大模型

组织门户支持成员自主公开,快速搭建内容|ModelWhale 版本更新

ModelWhale

云计算 数据分析 API 算力 数据门户

探索大模型应用,解决企业数字化转型“最后一公里”

中关村科金

面部表情识别的伦理问题

数据堂

技术分享 | web前端的HTML浅析

霍格沃兹测试开发学社

面部表情识别在安全领域的应用

数据堂

开源社区寻找八月创作之星!你准备好了吗~

Openlab_cosmoplat

人工智能 开源

海光财报解读:深耕研发,打造技术护城河

程序员海军

研究报告 海光

华为正式发布HarmonyOS NEXT开发者预览版,携手开发者共赴鸿蒙生态星辰大海

极客天地

观测,让运维更简单!龙蜥社区系统运维 MeetUp 等你报名

OpenAnolis小助手

操作系统 系统运维 ebpf Meetup 龙蜥社区

准确率提升近4%,自研ASR模型助力公安机关筑牢反诈安全网

中关村科金

技术分享 | 黑盒测试方法论-判定表

霍格沃兹测试开发学社

详解 HashMap 的底层实现原理

树上有只程序猿

Java 数据结构 hashmap 哈希

AI +悦数图数据库:图技术与大语言模型 LLM 结合,打造下一代知识图谱应用

最新动态

使用 RediSearch 在 Redis 中进行全文检索

AlwaysBeta

redis redisearch

面部表情识别在教育领域的应用

数据堂

技术分享 | 网页 frame 与多窗口处理

霍格沃兹测试开发学社

盘点国产CPU“六君子”之中科海光发展史

石云升

cpu 微处理器 中科海光

局域网部署,用WorkPlus视频会议保密又安全

BeeWorks

扎根x86市场稳步前进-海光投研报告解读

三掌柜

研究报告

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