关闭

android API使用追踪

标签: androidapijnijava
2491人阅读 评论(0) 收藏 举报
分类:

使用场景

有时候,我们知道某个具体的Java API被使用到。我们想知道该API是在哪里被使用到的。


直观的方法,就是搜索源代码,找到所有使用的地方,做标记(比如打log)。然后在输出log中查看标记就知道改API在什么地方调用到了。 该方法的缺点是显而易见的:

1. 如果调用该方法的地方很多,需要修改很多处

2. 如果再想看调用该方法的方法是在哪里被使用的,需要更多的修改。简直是噩梦。


更好的办法是利用java.lang.Throwable的特性,它记录方法的调用栈,我们可以用它来显示该方法的调用,并显示整个调用的序列。具体的方法,就是在改API的实现里生成一个Throwable对象,然后跑出来就可以啦:

public int xxx (xxx) {
    Throwable obj = new Throwable ("xxx checker");
    throw obj;
    ...
}
这样子当该方法被调用到后会终止执行,被抛出异常。我们从log里看到改方法完整的调用栈。

如果不想终止程序,只需要不活该异常,并打印出来就可以了:

public int xxx (xxx) {
try {
    Throwable obj = new Throwable ("xxx checker");
    throw obj;
catche (Throwable e) {
    Log.e(TAG, "xx call trace" + e.printTrace());
}
    ...
}

但是如果我们关心的API是个本地方法(native method),该方法就不能使用了。因为本地方法是没有java实现体的。解决的方法是找到JNI实现,在JNI实现里跑出异常,从而获得调用轨迹。 比如我们想知道

TBD


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:109018次
    • 积分:1294
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:0篇
    • 译文:0篇
    • 评论:52条
    文章分类
    最新评论