Dexposed:Android平台免Root无侵入AOP框架

简介:

本文来自阿里巴巴技术协会(ATA)

本文首发于 http://www.infoq.com/cn/news/2015/07/dexposed

近日,阿里巴巴无线事业部推出首个重量级Android开源项目,名为Dexposed,是一个Android平台下的无侵入运行期AOP框架。旨在解决像性能监控、在线热补丁等移动开发常见难题,典型使用场景为:

  • AOP编程
  • 插桩 (如测试、性能监控等)
  • 在线热补丁
  • SDK hooking以提供更好的开发体验

它基于ROOT社区著名开源项目Xposed改造剥离了ROOT部分,演化为服务于所在应用自身的AOP框架,并在Apache 2.0协议下开源。

Xposed是XDA社区用户rovo89开发并管理的一个项目,它通过修改Android Dalvik运行时的Zygote进程,使用Xposed Bridge将第三方代码注入到Android应用的方法调用中,实现非侵入式的在运行期动态修改系统和应用行为的能力。从推出到现在,它受到广大开发者和用户的欢迎,出现了数千个模块和适配不同Android ROM的安装器。

Dexposed受到Xposed的启发,但它关注于应用本身,仅仅提供改变应用自身运行时行为的能力,不提供注解处理器、织入(weaver)和改变字节码的能力。它的使用也很简单,只需在应用初始化阶段引入一个JNI库即可。另外,Dexposed还支持ART运行时,不过还在早期阶段。

InfoQ记者联系到该框架的作者并进行了采访,以下是我们了解到的更多信息。

Dexposed作者介绍:

胡文江,淘宝花名白衣(@Rock白衣),10年加入手机淘宝,目前在阿里巴巴无线事业部Android架构组,主要负责Android客户端基础架构及性能优化工作。有8年的智能手机软件开发经验(从早期的Symbian,WindowsMobile到今天的AndroidIOS),包括将近3年多的移动多媒体软件开发经验,将近4年多的大型移动互联网软件开发架构经验。

InfoQ:请介绍一下Dexposed项目,它的原理是什么样的,在淘宝内部是如何用的?

白衣:手机淘宝在12年下半年起就在寻找客户端动态改变的能力,投入了很多人力,做了很多各种各样有益的尝试。Dexposed项目就是在这种大背景下产生的。

Dexposed项目是手机淘宝独立研发,业界首创的无侵入式Android客户端热补丁方案的核心底层支撑技术。

它主要功能特性或者说它最强大的地方,就是在Android手机上能对一个客户端App内的任何Java方法进行『热』动态AOP替换,Java方法的AOP替换是立即生效的。

Dexposed中的AOP原理来自于Xposed。在Dalvik虚拟机下,主要是通过改变一个方法对象方法在Dalvik虚拟机中的定义来实现,具体做法就是将该方法的类型改变为native并且将这个方法的实现链接到一个通用的Native Dispatch方法上。这个 Dispatch方法通过JNI回调到Java端的一个统一处理方法,最后在统一处理方法中调用before, after函数来实现AOP。在Art虚拟机上目前也是是通过改变一个 ArtMethod的入口函数来实现。

它的典型应用场景可以用于解决线上严重问题时的紧急发版问题或者试验细微的体验优化,目前手机淘宝在这些场景下都有使用,也在拓展更多的使用场景。感兴趣的可以看下github主页上的sample例程。

InfoQ:当初是为何决定将这个项目开源出来,能介绍下你们部门对于开源的态度吗?

白衣:Dexposed项目最开始就是受Android开源项目Xposed的启发,做了创新性的改造,使之适用于单个Application的情况,从而使客户端App具备实时动态改变方法的能力,高效解决了客户端App发布后碰到严重线上问题时的紧急发版问题,让App开发没有后顾之忧。饮水思源,所以希望将该技术开源出去,回馈开源社区,取Dexposed的项目名,既有向原始开源项目致敬之意,也有将Android的dex方法暴露出来之意。至于开源的态度,我们认为开源是大的趋势,在某些方面开源软件已经主导创新,开源无处不在。我们相信,开源会走得越来越快,而且今天任何一家公司,你不可能绕过开源技术而闭门造车。所以我们决定开源,并得到了公司的肯定和大力支持,所以说这件事也体现了阿里积极拥抱开源社区的态度。

InfoQ:我看到这个项目在去年ArchSummit上已经预告要开源,但直到现在才开源出来,这期间有什么故事吗?

白衣:这里面主要有两点,第一是想将Dexposed更加完善一些(支持Art-Android新的java runtime)再开源,但是在研究Art上遇到了很多困难,这里耽搁了比较久的时间,到目前为止对Art的支持也只是初步的beta阶段,所以希望大家能一起努力交流,攻克这个难关。第二是阿里对外开源的项目也比较多,对内部技术的对外纰漏、方案开源的审查和把关上也需要一些时间。

InfoQ:这个开源项目的阶段性目标是什么?

白衣:现阶段的目标就是实现对Art的支持。不过后续还有很多有意思的feature在计划中。大家可以看我们的Roadmap,也欢迎大家提供更多想法。

国外在移动开发开源方面非常踊跃,一些大公司如Facebook、GitHub、Square等都贡献了很多项目,但在国内还很少有公司有这个意识,甚至有些公司不遵守开源协议。希望阿里的行为能够带动更多的公司从公司层面进行移动开发开源方面的活动,让移动开发领域能够出现更多国人项目的身影。

目录
打赏
0
0
0
1
88
分享
相关文章
Android平台GB28181执法记录仪技术方案与实现
本文介绍了大牛直播SDK的SmartGBD在执法记录仪场景中的应用。GB28181协议作为视频监控联网的国家标准,为设备互联互通提供规范。SmartGBD专为Android平台设计,支持音视频采集、编码与传输,具备自适应算法和多功能扩展优势。文章分析了执法记录仪的需求,如实时音视频传输、设备管理及数据安全,并详细阐述了基于SmartGBD的技术实现方案,包括环境准备、SDK集成、设备注册、音视频处理及功能扩展等步骤。最后展望了SmartGBD在未来智慧物联领域的广阔应用前景。
51 13
Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
本文详细探讨了在Android平台上实现HTTP-FLV播放器的过程。首先介绍了FLV格式的基础,包括文件头和标签结构。接着分析了HTTP-FLV传输原理,通过分块传输实现流畅播放。然后重点讲解了播放器的实现步骤,涵盖网络请求、数据解析、音视频解码与渲染,以及播放控制功能的设计。文章还讨论了性能优化和网络异常处理的方法,并总结了HTTP-FLV播放器的技术价值,尤其是在特定场景下的应用意义。
87 11
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
100 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
181 1
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
122 17
|
6月前
|
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
240 1
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等