Androidのstacktraceなどでコードジャンプするログが表示されています。
コードジャンプ自体はAndroidStudioの機能になるのですが、ログの作り方を工夫することでコードジャンプすることができるログを作ることができます。
そこで今回はコードジャンプする方法をご説明します。
コードジャンプするログ
Android StudioのAndroid Monitorのログからコードジャンプするには次の構文がログに入っているとAndorid Studioが自動的にリンクをしてくれてクリックするとジャンプすることができます。
(<クラスファイル名>.java:<ファイル内行数>)
Eclipseで開発していた頃はクラスのパッケージ名なども記載が必要でしたがAndroid Studioではその記載がなくても動作するようになりました。
また、パッケージ名を記載する下記の構文で記載すると同じファイル名が存在する場合に直接ジャンプすることができるようになります。
at <クラス名>.メソッド名(<ファイル名>.java:<ファイル内行数>)
コードジャンプするコード(パッケージ名指定)
Log.dでログを出し、ログのメッセージの後ろにコードジャンプする文字列を追加する例となります。
public class CustomLog {
public static void d(String tag, String message) {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
int index = -1;
for (int i = 0; i < stack.length; i++) {
if (stack[i].getMethodName().equals("d")) {
index = i + 1;
break;
}
}
String classNameFull = stack[index].getClassName();
String className = classNameFull.substring(classNameFull.lastIndexOf(".") + 1);
String methodName = stack[index].getMethodName();
String lineNumber = String.valueOf(stack[index].getLineNumber());
Log.d(tag, message + " at " + classNameFull + "." + methodName + "(" + className + ".java:" + lineNumber + ")");
}
}
CustomLog.dを使ってログを表示すると次のように表示されます。

青色になっている部分をクリックするとdを呼び出しているところへジャンプしてくれます。
コードジャンプするコード(パッケージ名指定なし)
Log.dでログを出し、ログのメッセージの後ろにコードジャンプする文字列を追加する例となります。
こちらはパッケージ名を限定しないやり方となります。
public class CustomLog {
public static void d2(String tag, String message) {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
int index = -1;
for (int i = 0; i < stack.length; i++) {
if (stack[i].getMethodName().equals("d2")) {
index = i + 1;
break;
}
}
String classNameFull = stack[index].getClassName();
String className = classNameFull.substring(classNameFull.lastIndexOf(".") + 1);
String lineNumber = String.valueOf(stack[index].getLineNumber());
Log.d(tag, message + "(" + className + ".java:" + lineNumber + ")");
}
}
CustomLog.d2を使ってログを表示すると次のように表示されます。
青色になっている部分をクリックするとd2を呼び出しているところへジャンプしてくれます。

もし同じファイル名が存在する場合は青色部分をクリックした場合は次のように候補を出してくれます。

メリットとしてはログの付属情報が短くなるのでこちらを利用するほうがわかりやすいかもしれません。