繁体   English   中英

如何在android(java)中获取方法名称

[英]How to get method name in android (java)

我想在 android 应用程序上检索方法名称以进行记录,但似乎无法获取。 我已经尝试过按照其他答案中的建议进行操作,例如:

Thread.currentThread().getStackTrace();

new Object(){}.getClass().getEnclosingMethod().getName();

无济于事,第一个返回了一个堆栈,其中包含以下内容:

getThreadStackTrace
getStackTrace
a
b
a
run
mainLoop
run

第二个返回“a”作为方法名称。

有谁知道另一种获得它的方法或为什么会发生这种情况?

这些ab方法名称在启用代码混淆时出现。

在 Android 中,Proguard 或 R8 就是这样做的。

在 R8 混淆您的代码后,理解堆栈跟踪很困难(如果不是不可能的话),因为类和方法的名称可能已更改。 除了重命名之外,R8 还可以更改堆栈跟踪中存在的行号,以在写入 DEX 文件时实现额外的大小节省。

如果我们需要对代码进行反混淆,则必须使用构建期间生成的mapping.txt

幸运的是,R8 每次运行时都会创建一个 mapping.txt 文件,其中包含映射到原始名称的混淆类、方法和字段名称。 此映射文件还包含将行号映射回原始源文件行号的信息。 R8 将文件保存在 /build/outputs/mapping// 目录中。

有关反混淆的更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM