软件简介

DroidAssist  是一个轻量级的 Android 字节码编辑插件,基于  Javassist  对字节码操作,根据 xml 配置处理 class 文件,以达到对 class 文件进行动态修改的效果。和其他 AOP 方案不同,DroidAssist 提供了一种更加轻量,简单易用,无侵入,可配置化的字节码操作方式,你不需要 Java 字节码的相关知识,只需要在 Xml 插件配置中添加简单的 Java 代码即可实现类似 AOP 的功能,同时不需要引入其他额外的依赖。

功能

  • 替换:把指定位置代码替换为指定代码
  • 插入:在指定位置的前后插入指定代码
  • 环绕:在指定位置环绕插入指定代码
  • 增强
    • TryCatch 对指定代码添加 try catch 代码
    • Timing 对指定代码添加耗时统计代码

特点

  • 灵活的配置化方式,使得一个配置就可以处理项目中所有的 class 文件。
  • 丰富的字节码处理功能,针对 Android 移动端的特点提供了例如代码替换,添加try catch,方法耗时等功能。
  • 简单易用,只需要依赖一个插件,处理过程以及处理后的代码中也不需要添加额外的依赖。
  • 处理速度较快,只占用较少的编译时间。

使用指南

DroidAssist 适用于 Android Studio 工程 application model 或者 library model,使用 DroidAssist 需要接入 DroidAssist 插件并编写专有配置文件。

在 root project 的 build.gradle 里添加:

dependencies {
    classpath "com.didichuxing.tools:droidassist:1.0.8"
}

在需要处理的 model project 的 build.gradle 里添加:

apply plugin: 'com.didichuxing.tools.droidassist'
droidAssistOptions {
    config file("droidassist.xml"),file("droidassist2.xml") //插件配置文件(必选配置,支持多配置文件)
}

其他配置:

  • enable 如果需要停用 DroidAssist 插件功能,可以添加 enable false 以停用插件 (可选配置)
  • logLevel 日志输出等级:0 关闭日志输出,1 输出日志到控制台 2 输出日志到文件 3 输出日志到控制台以及日志 (可选配置)
  • logDir 日志输出目录,当日志输出到文件时,默认的输出目录是当前 model 的 build/outputs/logs 目录 (可选配置)

示例

下面例子将把项目中所有使用系统 android.util.Log 类进行 DEBUG 日志输出的代码替换为自定义的日志输出类,以方便对线上日志进行策略化,动态化管理。

<Replace>
    <MethodCall>
        <Source>
           int android.util.Log.d(java.lang.String,java.lang.String)
        </Source>
        <Target>
            $_=com.didichuxing.tools.test.LogUtils.log($1,$2);
        </Target>
    </MethodCall>
</Replace>

处理前的class:

public class MainActivity extends Activity {
    public static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "MainActivity onCreate");
    }
}

处理后的 class:

public class MainActivity extends Activity {
    public static final String TAG = "MainActivity";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String var2 = "MainActivity";
	    String var3 = "MainActivity onCreate";
        int var4 = LogUtils.log(var2, var3); // The target method using custom log method.
    }
}

完整文档

完整开发文档和配置见 开发文档wiki

局限

  1. 由于 Javassist 的机制,DroidAssist 在处理的过程中将会产生额外的局部变量用以指向参数变量和保存返回值,但处理后有一些局部变量并没有实际作用。
  2. DroidAssist 在处理某些代码时可能会新增一些额外的代理方法。
  3. DroidAssist 插件用于 library model 只能处理 Java 源码产生的 class,不能处理本地依赖中的 jar 。
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/04/04 16:58

滴滴开源 DroidAssist : 轻量级 Android 字节码编辑插件

桔妹导读:近日,滴滴发布的开源项目 DroidAssist ,提供了一种简单易用、无侵入、配置化、轻量级的 Java 字节码操作方式,只需要在 XML 配置中添加简单的 Java 代码即可实现编译期对 Class 文件的动态修改。 Dr...

0
0
发表了博客
04/22 22:45

滴滴公开课 | 为研发提效,程序员通识课4连播

推荐阅读 ▬ 更多推荐 ▬ 滴滴开源 / Open Source Nightingale | FastLoad | Levin | AoE | Delta | Mpx | Booster | Chameleon | DDMQ | DroidAssist | Rdebug | Doraemonkit | Mand Moblie | virtualApk | 获取......

0
0
发表了博客
2019/04/18 19:44

滴滴出行副总裁刘向宏深度解读《大数据驱动智慧交通》

桔妹导读:滴滴与高教社联手打造《大数据驱动智慧交通》讲座,由滴滴出行副总裁刘向宏担任主讲,作为爱课程推出的《人工智能产业应用前沿》课程第五讲,已于4月11日晚7点上线中国大学MOOC平台。 ————— 此次由...

0
0
发表了博客
04/02 10:27

技术沙龙丨滴滴云X混沌说线上公开课首次免费开放

导读:本期小编为大家推荐的活动是——混沌说云课堂。「混沌说」是滴滴云平台事业群,搭建的中后台技术交流平台,旨在成为链接前中后台开发者的沟通桥梁和产品技术交流阵地,最早仅对滴滴内部小桔人开放,此次「滴...

0
0
发表了博客
03/31 22:51

滴滴科技云开讲 | CCF“名企面对面”滴滴专场, 4月1日等你来!

导读:疫情当下,高校大学生是否面临更为严峻的就业形势?是否在经历职业生涯规划的迷茫?历经1个月紧密策划和筹备,中国计算机协会CCF推出“CCF名企面对面”系列活动,面向所有学生会员和非会员免费开放。滴滴作...

0
0
发表了博客
06/26 22:51

即将出发!朱广权带您体验滴滴自动驾驶网约车

桔妹导读:未来的出行会是什么样?新科技将如何改变出行?6月27日上午10:00,且看央视主播朱广权带你体验无人驾驶的网约车踏上未来科技之路。 未来出行会是什么样?新科技将如何改变出行?6月27日起,上海市民即可...

0
0
发表了博客
04/30 21:58

AI 战“疫”,滴滴人脸识别助力疫情防控

导读:在随着疫情防控进入攻坚阶段,在公共场所如何对人员或人流实现高效安全的管理变得格外关键。如何有效识别人员是否佩戴口罩?如何在人们佩戴口罩的情况下刷脸“打卡”?在此前的文章中,我们曾分享过关于是否...

0
0
发表了博客
04/22 22:45

KDD Cup 2020开赛,滴滴邀你挑战共享出行领域优化难题

导读:2020年4月3日,由滴滴主办的 KDD Cup 2020强化学习挑战赛正式开赛,邀请全球算法高手共同挑战共享出行领域优化难题。 KDD Cup(国际知识发现和数据挖掘竞赛)由美国计算机协会知识发现与数据挖掘专委会(A...

0
0
发表了博客
06/21 23:10

在公司写代码时,我总想回家带娃。

桔妹导读:离天空最近的地方,是父亲的肩膀。在这个特别的日子里,小编也搜集了一些滴滴年轻的工程师奶爸们的分享,听他们聊一聊当爸的初体验。也借此机会祝福所有做了父亲的工程师们,节日快乐! 内心充满激动和...

0
0
发表于开发技能专区
10/14 08:00

滴滴开源了哪些有意思的项目?

前言 作为卓越的一站式移动出行和生活平台,滴滴在亚洲、拉美和澳洲为超过5.5亿用户提供出租车、快车、专车、豪华车、公交、代驾、企业级、共享单车、共享电单车、汽车服务、外卖、支付等多元化的服务。 滴滴平台...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
5 收藏
分享
返回顶部
顶部