android谷歌打印插件,Android gradle插件打印时间戳

在性能调优时经常要打印函数执行时间、参数值等, 为了调试加了很多代码,调完后还要删掉, 这个事很繁琐。 我们可以用Android Profiler或methodtracing打印函数执行时间,但日志太多了且缺少参数值。所以JakeWharton写了个hugo库, 是用AspectJ实现的,基于AOP思想。 我看了hugo源码,总共四个文件左右,代码量很少。

我想做个同功能的插件,顺便学习一下gradle插件制作方法和字节码注入。

项目build.gradle文件里添加classpath和maven。

buildscript {

repositories {

google()

jcenter()

maven { url "https://dl.bintray.com/brycegmail/maven" }

}

dependencies {

classpath 'com.android.tools.build:gradle:3.1.3'

classpath 'com.brycegao.timeplugin:timeplugin:1.0.4'

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

}

}

allprojects {

repositories {

google()

jcenter()

maven { url "https://dl.bintray.com/brycegmail/maven" }

}

}

task clean(type: Delete) {

delete rootProject.buildDir

}

在app模块的build.gradle文件添加

apply plugin: 'timeplugin'

...

implementation 'com.brycegao.tpannotation:tpannotation:1.0.2'

在想打印日志的类或方法前添加注解@DebugLogger即可,用法参照hugo实现的。

@DebugLogger

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

showMsg(1, "this is test");

findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() {

@Override public void onClick(View view) {

Intent intent = new Intent(MainActivity.this, SecondActivity.class);

startActivity(intent);

}

});

}

private void showMsg(int i, String msg) {

try {

Thread.sleep(100); //仅仅为了测试

} catch (Exception ex) {

ex.printStackTrace();

}

}

@Override public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

}

}

运行程序:

8efb84bffeac

日志.png

原理:

注解的作用表示要修改哪个函数, gradle插件的作用是遍历.class, Javassist是字节码注入工具。

在编译期间进行字节码注入, 打开./app/build/intermediates/classes/debug/transforms/TPTransform/1目录可以看到修改后的字节码。

8efb84bffeac

注入字节码.png

优点:在编译期间注入业务逻辑代码,比在源码里加log更方便,不用feature时只要配置gradle 插件不参与编译即可。

展望:在编译期间加日志只是一个点, 还可以实现很多其它业务逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值