开发者社区> mtt1111> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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等都贡献了很多项目,但在国内还很少有公司有这个意识,甚至有些公司不遵守开源协议。希望阿里的行为能够带动更多的公司从公司层面进行移动开发开源方面的活动,让移动开发领域能够出现更多国人项目的身影。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Qt开发技术:QCharts(四)QCharts面积图介绍、Demo以及代码详解
Qt开发技术:QCharts(四)QCharts面积图介绍、Demo以及代码详解
67 0
史上最全的ElasticSearch系列之实战SpringBoot+spring-data-elasticsearch(下)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
43 0
Bootstrap响应式前端框架笔记九——输入框组
Bootstrap响应式前端框架笔记九——输入框组
63 0
再不懂时序就 OUT 啦!,DBengine 排名第一时序数据库,阿里云数据库 InfluxDB 正式商业化!
阿里云数据库 InfluxDB® 版已于近日正式启动商业化 。 InfluxDB 是 DBengine 网站时序数据库类目排名第一的数据库产品,广泛应用于互联网基础资源监控,容器监控,业务运营监控分析,物联网设备远程实时监控,工业安全生产监控,生产质量评估和故障回溯。
3353 0
阿里云即将全球首发云骨干网
阿里云将于2017年12月13日发布阿里云下一代企业级网络暨云骨干网。届时,云栖社区将会对发布会进行直播,欢迎预约https://yq.aliyun.com/promotion/434。   那么,什么是云骨干网?它有哪些特性?用于哪些场景和解决哪些问题呢?本文为您进行产品解读。
10140 0
使用Advanced Installer 自动部署 Arcgis Engine Runtime 10.0
原文:使用Advanced Installer 自动部署 Arcgis Engine Runtime 10.0       目前采用Arcgis9.2 + c#(vs2008)作为程序开发平台,是一个不错的搭配。
1659 0
OpenGL ES 版本与iOS版本的支持对应关系以及EAGL的来源分析
OpenGL ES 版本与iOS版本的支持对应关系以及EAGL的来源分析 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
1720 0
ArcGIS Engine中的Symbols详解
本文由本人翻译ESRI官方帮助文档。尊重劳动成果,转载请注明来源。 Symbols     ArcObjects用了三种类型的Symbol(符号样式)来绘制图形特征:marker symbols(标记符号),line symbols(线符号),和fill symbols(填充符号)。
704 0
+关注
22
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载