android 打印函数调用堆栈

如果是系统应用,则可以直接调用如下方法:

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()
        }
    }
}
相关推荐
CYRUS_STUDIO16 小时前
Frida 源码编译全流程:自己动手编译 frida-server
android·逆向
冬奇Lab17 小时前
音视频同步与渲染:PTS、VSYNC 与 SurfaceFlinger 的协作之道
android·音视频开发
Grackers21 小时前
Android Perfetto 系列 9:CPU 信息解读
android
零陵上将军_xdr1 天前
MySQL 事务写入流程详解
android·数据库·mysql
菜鸟国国1 天前
Jetpack Compose 副作用完全解析(初学者必看,超详细)
android
2501_915921431 天前
苹果iOS应用开发上架与推广完整教程
android·ios·小程序·https·uni-app·iphone·webview
jian110581 天前
Android studio gradle和插件的版本设置
android·ide·android studio
idolao1 天前
Android Studio 2022安装与汉化教程 Windows版:解压+管理员运行+自定义路径+SDK配置+中文插件指南
android·windows·android studio
2501_915106321 天前
HTTP和HTTPS协议工作原理及安全性全面解析
android·ios·小程序·https·uni-app·iphone·webview