[英]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”作為方法名稱。
有誰知道另一種獲得它的方法或為什么會發生這種情況?
這些a
和b
方法名稱在啟用代碼混淆時出現。
在 Android 中,Proguard 或 R8 就是這樣做的。
在 R8 混淆您的代碼后,理解堆棧跟蹤很困難(如果不是不可能的話),因為類和方法的名稱可能已更改。 除了重命名之外,R8 還可以更改堆棧跟蹤中存在的行號,以在寫入 DEX 文件時實現額外的大小節省。
如果我們需要對代碼進行反混淆,則必須使用構建期間生成的mapping.txt
。
幸運的是,R8 每次運行時都會創建一個 mapping.txt 文件,其中包含映射到原始名稱的混淆類、方法和字段名稱。 此映射文件還包含將行號映射回原始源文件行號的信息。 R8 將文件保存在 /build/outputs/mapping// 目錄中。
有關反混淆的更多詳細信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.