簡體   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