登录 立即注册
安币:

查看: 3576|回复: 24

Dexposed —— 来自阿里无侵入式运行期 AOP 框架

[复制链接]

55

主题

69

帖子

97

安币

程序猿

Rank: 2

发表于 2015-7-15 10:32:47 | 显示全部楼层 |阅读模式

Dexposed 是阿里巴巴无线事业部第一个重量级 Andorid 开源软件,基于 ROOT 社区著名开源项目Xposed 改造剥离了 ROOT 部分,演化为服务于所在应用自身的 AOP 框架。它支撑了阿里大部分 App 的在线分钟级客户端 bugfix 和线上调试能力。

Dexposed 的 AOP 是实现了纯非侵入式,没有任何注释处理器,weaver 或者字节码重写程序。Dexposed 的集成非常简单,就像加载一个 JNI 库一样,只需要在初始化的时候插入一行代码。

经典用例
  • 典型的 AOP 编程
  • 仪表化 (测试,性能监控等等)
  • 在线热修复(重要,关键,安全漏洞等等)
  • SDK hooking,更好的开发体验

Gradle 依赖:

[AppleScript] 查看源文件 复制代码
native_dependencies {
    artifact 'com.taobao.dexposed:dexposed_l:0.2+:armeabi'
    artifact 'com.taobao.dexposed:dexposed:0.2+:armeabi'
}
dependencies {
    compile files('libs/dexposedbridge.jar')
}

初始化:

[Java] 查看源文件 复制代码
public class MyApplication extends Application {
  [url=home.php?mod=space&uid=389554]@Override[/url] public void onCreate() {		
    // Check whether current device is supported (also initialize Dexposed framework if not yet)
    if (DexposedBridge.canDexposed(this)) {
      // Use Dexposed to kick off AOP stuffs.
      ...
    }
  }
  ...
}

基础使用示例代码1:

[Java] 查看源文件 复制代码
// Target class, method with parameter types, followed by the hook callback (XC_MethodHook).
   DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodHook() {
       // To be invoked before Activity.onCreate().
       @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
  // "thisObject" keeps the reference to the instance of target class.
  Activity instance = (Activity) param.thisObject;
  // The array args include all the parameters.
  Bundle bundle = (Bundle) param.args[0];
  Intent intent = new Intent();
  // XposedHelpers provide useful utility methods.
  XposedHelpers.setObjectField(param.thisObject, "mIntent", intent);
  // Calling setResult() will bypass the original method body use the result as method return value directly.
  if (bundle.containsKey("return"))
      param.setResult(null);
       }
       // To be invoked after Activity.onCreate()
       @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable {
  XposedHelpers.callMethod(param.thisObject, "sampleMethod", 2);
       }
   });

基础使用示例代码2:

   
[Java] 查看源文件 复制代码
DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodReplacement() {
        @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
            // Re-writing the method logic outside the original method context is a bit tricky but still viable.
            ...
        }

    });

0

主题

0

帖子

-15

安币

限制会员

发表于 2015-7-25 13:49:32 | 显示全部楼层
路过还不错

0

主题

0

帖子

-19

安币

限制会员

发表于 2015-8-4 17:06:17 | 显示全部楼层
我表示压力很大

0

主题

0

帖子

-15

安币

初级码农

Rank: 1

发表于 2015-8-21 03:41:29 | 显示全部楼层
谢谢楼主的辛苦分享

0

主题

0

帖子

-16

安币

限制会员

发表于 2015-9-6 14:16:41 | 显示全部楼层
不错不错 支持下

0

主题

0

帖子

-6

安币

限制会员

发表于 2015-9-26 15:57:21 | 显示全部楼层
不错!顶LZ

0

主题

0

帖子

-15

安币

初级码农

Rank: 1

发表于 2015-10-16 17:38:01 | 显示全部楼层
看帖子的要发表下看法

0

主题

0

帖子

-2

安币

限制会员

发表于 2015-11-1 04:33:31 | 显示全部楼层
支持你们一下下哈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表