[轉]結合HierarchyViewer和APK文件反編譯得到APP元素id值

背景:
最近在使用Robotium進行Android自動化測試。遇到了一個問題:我須要得到一個View的id(int型數值)。此前我在 http://maider.blog.sohu.com/255448342.htmlhttp://maider.blog.sohu.com/255485243.html兩篇文章中講述瞭如何打開手機上的View Server來使用HierarchyViewer。HierarchyViewer對查看UI組件當然有幫助,但要想獲取一個元素的id仍是不行的。請看下圖:
我在HierarchyViewer中查看「發佈」這個View,HierarchyViewer顯示了一個 @414a54c8id/flipper_head_action注意:@後加一串16進制數並非這個view的id,而只是一個對咱們人類沒有任何意義的指針值。
 
可是咱們有這個元素的id名 flipper_head_action。咱們須要按圖索驥,按這個id名找到對應的數值。
 
解決步驟:
1.下載反編譯器 dex2jar,和一個java源代碼查看器 jd-gui
下載地址:
2.解壓第一步下載的東西,放在適當文件夾。
3.將要反編譯的apk文件後綴改成zip並解壓,獲得其中的classes.dex,它就是java文件編譯再經過dx工具打包而成的,將classes.dex複製到第2步解壓獲得的 dex2jar.bat所在文件夾。
4.將命令行定位到 dex2jar.bat 所在文件夾,運行命令:
dex2jar.bat classes.dex
在同文件夾下生成:
classes_dex2jar.jar
5.打開第二步解壓獲得的 jd-gui.exe,File-》Open File打開第四步生成的 classes_dex2jar.jar
6.如今在jd-gui中的左側導航中,定位到APP所在的包吧!(這個包名,你在HierarchyViewer裏能看獲得)。例圖:

7.滾動jd-gui的左側導航欄至較下方,能夠看到反編譯出的R文件。而其中有一個R$id就是咱們要找的文件。
8.如今,在R$id文件中,搜索本文開始獲得的元素id名字吧( flipper_head_action),咱們獲得了這個元素的id的int值爲2131427472。大功告成!
 
本篇文章參考了:
相關文章
相關標籤/搜索