背景:
![](http://1804.img.pp.sohu.com.cn/images/blog/2013/3/30/21/13/c51683636_13e7f4c9c4fg85_blog.png)
最近在使用Robotium进行Android自动化测试。遇到了一个问题:我需要获得一个View的id(int型数值)。此前我在http://maider.blog.sohu.com/255448342.html和http://maider.blog.sohu.com/255485243.html两篇文章中讲述了如何打开手机上的View Server来使用HierarchyViewer。HierarchyViewer对查看UI组件固然有帮助,但要想获取一个元素的id还是不行的。请看下图:![](http://1882.img.pp.sohu.com.cn/images/blog/2013/3/30/20/27/c51683636_13e7f3e39c2g86_blog.png)
![](http://1882.img.pp.sohu.com.cn/images/blog/2013/3/30/20/27/c51683636_13e7f3e39c2g86_blog.png)
我在HierarchyViewer中查看“发布”这个View,HierarchyViewer显示了一个@414a54c8和id/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里能看得到)。例图:
![](http://1804.img.pp.sohu.com.cn/images/blog/2013/3/30/21/13/c51683636_13e7f4c9c4fg85_blog.png)
![](http://1812.img.pp.sohu.com.cn/images/blog/2013/3/30/21/13/c51683636_13e7f4cdfaeg86_blog.png)
7.滚动jd-gui的左侧导航栏至较下方,可以看到反编译出的R文件。而其中有一个R$id就是我们要找的文件。
![](http://1864.img.pp.sohu.com.cn/images/blog/2013/3/30/21/15/c51683636_13e7f4e8612g85_blog.png)
8.现在,在R$id文件中,搜索本文开始得到的元素id名字吧(flipper_head_action),我们得到了这个元素的id的int值为2131427472。大功告成!
![](http://1882.img.pp.sohu.com.cn/images/blog/2013/3/30/21/17/c51683636_13e7f50b3deg86_blog.png)
本篇文章参考了: