NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

OpenInfra Days China 2022|SelectDB与你共享 Apache Doris 在互联网广告业务中的实践

SelectDB

MySQL 数据库 数据仓库 数据湖 Doris

全新出品!Github总榜排行第七的SpringCloud生态全栈笔记我粉了

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

荣耀互联对外开放,赋能智能硬件合作伙伴,促进全场景生态产品融合

荣耀开发者服务平台

【web自动化测试】Playwright快速入门,5分钟上手

和牛

自动化 测试 playwright Python. 8月月更

web前端培训课程哪个比较好?

小谷哥

什么是内部客户服务?

Geek_da0866

目标检测的发展与现状

阿炜小菜鸡

目标检测 8月月更

倒数 3 天|RocketMQ 能力全景图即将发布,定义下一代消息队列未来方向

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列

数据库治理的探索与实践

阿里巴巴云原生

数据库 阿里云 微服务 云原生

硬核!阿里P7技术员身经百战总结出这份210页的Java突击面试指南

了不起的程序猿

阿里巴巴 算法 高并发 Java 面试 java程序员

基于 eBPF 的 Kubernetes 可观测实践

阿里巴巴云原生

阿里云 Kubernetes 云原生 可观测

企业即时通讯软件有哪些功能?对企业有什么帮助?

WorkPlus

安装失败怎么办

和牛

测试

框架整合(二)- 使用Apache ShardingSphere实现数据分片

大菠萝蜜

MySQL 8月月更

【注册荣耀开发者】赢【荣耀70】手机

荣耀开发者服务平台

开发者 手机 活动 应用 荣耀

字节二面被问到mysql事务与锁问题,我蚌埠住了

程序员小毕

Java MySQL 数据库 程序员 面试

运力升级助力算力流转,中国数字经济的加速时刻

脑极体

【K8s入门必看】第三篇 —— K8s必备基础概念大梳理

Albert Edison

Docker Kubernetes 容器 云原生 8月月更

从云计算到函数计算

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

《机器学习的随机矩阵方法》

计算机与AI

Python 机器学习 数学

荣耀发布开发者服务平台,智慧生态合作提速

荣耀开发者服务平台

基础到高级涵盖11个技术,Alibaba最新出品711页Java面试神册真香

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

WEB前端面授培训课程

小谷哥

浅谈运用低代码技术如何实现物流企业的降本增效

王平

开发一套高容错分布式系统

JAVA活菩萨

Java 程序员 后端 java程序员 java编程

JWT主动校验Token是否过期

源字节1号

软件开发 后端开发

深圳大数据培训多长时间可以找工作

小谷哥

服务器

武师叔

8月月更

如何模拟后台API调用场景,很细!

Liam

前后端分离 开发 Postman API 前后端协作

《机器学习理论到应用》电子书免费下载

计算机与AI

Python 机器学习 数据科学

荣科科技:未来主要围绕在线互联化、生态化和智能大数据运营这三个方向发展

WorkPlus

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