如果是系统应用,则可以直接调用如下方法:
rust
Debug.getCallers(10)
@UnsupportedAppUsage 注释过的方法,只能系统应用才能调用
ini
@UnsupportedAppUsage
public static String getCallers(final int depth) {
final StackTraceElement[] callStack = Thread.currentThread().getStackTrace();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < depth; i++) {
sb.append(getCaller(callStack, i)).append(" ");
}
return sb.toString();
}
非系统应用,则只好用反射方式进行调用了,如下
kotlin
private fun getCallers(depth:Int): String {
try{
val calssName = "android.os.Debug"
val clazz = Class.forName(calssName)
val method = clazz.getMethod("getCallers",Int::class.java)
method.isAccessible = true
val result = method.invoke(null,depth) as String
return result
}catch (e: ClassNotFoundException){
e.printStackTrace()
return null.toString()
}catch (e:NoSuchMethodException){
e.printStackTrace()
return null.toString()
}
}
}