结合HierarchyViewer和APK文件反编译获得APP元素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。大功告成!
本篇文章参考了:
2013.4.13更新:
在Robotium的Google Group里看到有人说了,不用那么麻烦地反编译源代码, 在你的继承ActivityInstrumentationTestCase2的测试类中的测试方法中,这么写就好:
Context currContext = getInstrumentation().getTargetContext();
String packageName = currContext.getPackageName();
int viewId = currContext.getResources().getIdentifier(“whatYouSeeInHierarhicViewer”,”id”, packageName);
View foundView = solo.getView(viewId)
solo.clickOnView(foundView,false)
当然也可以参考我的另一篇博文第五点:http://maider.blog.sohu.com/260998798.html
0 条评论
发表一条评论