最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

评论

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

大数学家笛卡尔到底是怎么死的? |《隐秘的角落》

赵新龙

数学 隐秘的角落 笛卡尔

最详细的Java/后端学习路线

犬来八荒

业务学习-美团闪购

第519区

四面阿里巴巴回来分享面经总结,定级P7架构师

小吴选手

架构 技术 面试 Spring Boot 阿里

高效程序员的七个好习惯——你有吗?

小谈

程序员 面试 JVM springboot SpringCloud

信创舆情一线--印度封禁59款中国App

统小信uos

App 舆情 印度

阿里大型企业级开发必用微服务:深入浅出SpringBoot2.x

小闫

spring jdk 面试 后端 springboot

第五周作业

武鹏

十分钟带你彻底搞懂原码、反码、补码

程序员生活志

补码 原码 反码

数据产品经理的具象化

松子(李博源)

大数据 产品经理 数据产品

谁没个焦虑的时段呢?

封不羁

程序员 个人成长 个人感想

数据集永久下架,微软不是第一个,MIT 也不是最后一个

神经星星

AI 计算机视觉 MIT AI 伦理 数据集

2.3万个MongoDB数据库遭黑客比特币勒索,你中招了吗?中招怎么办?

墨天轮

比特币 数据库 oracle mongodb 黑客

计算机操作系统基础(十)---存储管理之虚拟内存

书旅

php laravel 线程 操作系统 进程

太阳马戏团在疫情下的组合式创新

石云升

商业模式 组合式创新 思想实验

区块链正处于手脚并用攀爬的“攻坚时刻”

CECBC

数据上链 市场选择

nightingale安装详解

曾祥斌

java基础思维导图,让java不再难懂 (建议收藏))

码哥小胖

面试 Spring Boot Java 分布式

AndroidStudio真机调试 - Waiting for Debugger

麦洛

Android Studio 真机调试

公司短信平台上的两万块钱,瞬间就被刷没了

古时的风筝

短信防刷 接口安全 短信轰炸机

了不起的 Webpack 构建流程学习指南

pingan8787

Java 大前端 Web webpack

选择排序

wjchenge

猿灯塔:最详细Dubbo相关面试题

猿灯塔

2020年7月国产数据库排行:华为、腾讯发新品,中兴、阿里结硕果

墨天轮

数据库 阿里 排行榜

系统架构师week04 Homework - 互联网架构技术手段和方案

尔东雨田

极客大学架构师训练营

自动特征工程在推荐系统中的研究

天枢数智运营

人工智能 推荐系统

了不起的 tsconfig.json 学习指南

pingan8787

typescript 大前端 Web

蟒周刊/427:机器狗已在公开发售,支持用 Python 对其编程...

ZoomQuiet大妈

Python 大妈 蟒营® 蟒周刊 101camp

​ “强大基座”再展能力,一朵“云”掀起国产化浪潮

Geek_116789

架构师训练营 - 第五课作业 -20200708- 一致性HASH

👑👑merlan

极客大学架构师训练营 一致性哈希

ThreadPoolExecutor 线程池使用

郭儿的跋涉

线程 多线程 线程池

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