android反编译获取布局文件,Android学习札记44:解读APK反编译后得到的布局文件...

牛学习了

通常情况下,我们使用 dex2jar

工具反编译 Android APK文件之后,会得到如下这些文件:

64764495_1.png

其中,res 文件夹下都是我们在

Android 工程下常见的资源文件:

64764495_2.png

如果我们对这个应用犀利美观的布局很感兴趣的话,可以进一步反编译它的布局文件:

64764495_3.png

可以看到,这些布局文件都是 .xml

文件,默认情况下打开之后都是乱码,下图是用 Notepad++ 打开之后的效果:

64764495_4.jpg

这里,我们使用 AXMLPrinter2

工具将 .xml 文件转换为可读的 .txt文件。通过 CMD 进到 AXMLPrinter2

所在目录下,键入以下命令:

java -jar AXMLPrinter2.jar home.xml > home.txt

这样我们就可以得到 home.txt

文件:

64764495_5.png

打开 home.txt

,现在我们就可以读懂这个布局文件了:

64764495_6.png

好了,到这一步也许很多人就不必继续下去了。

但是...但是,像我这样的初学者,拿到这个布局文件可能还不够,我还需要进一步了解各个控件的作用和意义,这个时候我们就不得不止步于

"android:id="@7F0A004D" ,我们无法理解这个到底代表了什么。

现在,如果熟悉 Android

工程结构的同学肯定会想到,Android 工程默认情况下都会将各种资源自动映射生成到 R.java 中,因此,这里的

"@7F0A004D" 肯定是 R.java 中的某个字段,我们要做的就是从 R.java 中把它找出来。

回想到文章开始的时候我们用 dex2jar

工具反编译了 APK 文件,现在是时候派它出场了。在这里,我们使用 jd-gui 读取反编译后得到的

classes_dex2jar.jar 文件,如下图:

64764495_7.png

找到

R.class:

64764495_8.png

OK,现在我们就可以看到这个文件了:

64764495_9.png

这个时候,如果你对编程特别敏感的话,你应该立马会想到

"android:id="@7F0A004D" 中的 "7F0A004D" 很可能是 16 进制,而 R.class 中的诸如

"LoadingDialog = 2131230732" 中的值 "2131230732" 应该是 10

进制的,为了验证这个猜想,我们尝试将 "7F0A004D" 转换为 10 进制:

64764495_10.png

在 R.class 文件中查找

"2131361869",果然:

64764495_11.png

现在我们终于知道布局文件中的这个控件原来代表着

"home_title" 的含义,这下子我们在读反编译后的代码时就轻松多了。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值