Android学习札记44:解读APK反编译后得到的布局文件
来源:互联网 发布:电信卡网络不好怎么办 编辑:程序博客网 时间:2024/06/05 11:22
通常情况下,我们使用 dex2jar 工具反编译 Android APK文件之后,会得到如下这些文件:
其中,res 文件夹下都是我们在 Android 工程下常见的资源文件:
如果我们对这个应用犀利美观的布局很感兴趣的话,可以进一步反编译它的布局文件:
可以看到,这些布局文件都是 .xml 文件,默认情况下打开之后都是乱码,下图是用 Notepad++ 打开之后的效果:
这里,我们使用 AXMLPrinter2 工具将 .xml 文件转换为可读的 .txt文件。通过 CMD 进到 AXMLPrinter2 所在目录下,键入以下命令:
java -jar AXMLPrinter2.jar home.xml > home.txt
这样我们就可以得到 home.txt 文件:
打开 home.txt ,现在我们就可以读懂这个布局文件了:
好了,到这一步也许很多人就不必继续下去了。
但是...但是,像我这样的初学者,拿到这个布局文件可能还不够,我还需要进一步了解各个控件的作用和意义,这个时候我们就不得不止步于 "android:id="@7F0A004D" ,我们无法理解这个到底代表了什么。
现在,如果熟悉 Android 工程结构的同学肯定会想到,Android 工程默认情况下都会将各种资源自动映射生成到 R.java 中,因此,这里的 "@7F0A004D" 肯定是 R.java 中的某个字段,我们要做的就是从 R.java 中把它找出来。
回想到文章开始的时候我们用 dex2jar 工具反编译了 APK 文件,现在是时候派它出场了。在这里,我们使用 jd-gui 读取反编译后得到的 classes_dex2jar.jar 文件,如下图:
找到 R.class:
OK,现在我们就可以看到这个文件了:
这个时候,如果你对编程特别敏感的话,你应该立马会想到 "android:id="@7F0A004D" 中的 "7F0A004D" 很可能是 16 进制,而 R.class 中的诸如 "LoadingDialog = 2131230732" 中的值 "2131230732" 应该是 10 进制的,为了验证这个猜想,我们尝试将 "7F0A004D" 转换为 10 进制:
在 R.class 文件中查找 "2131361869",果然:
现在我们终于知道布局文件中的这个控件原来代表着 "home_title" 的含义,这下子我们在读反编译后的代码时就轻松多了。
- Android学习札记44:解读APK反编译后得到的布局文件
- 如何反编译android的apk文件得到资源文件
- 如何反编译android的apk文件得到资源文件
- 如何反编译android的apk文件得到资源文件
- 如何反编译android的apk文件得到资源文件
- 反编译Android的apk包得到源码
- 反编译Android的apk包得到源码
- android-反编译后重新打包apk文件
- android apk 文件的反编译
- android 反编译apk得到源代码
- Android APK反编译得到源码
- android apk的反编译学习
- Android APK反编译得到Java源代码和资源文件
- Android APK反编译得到Java源代码和资源文件
- Android APK反编译得到Java源代码和资源文件
- Android APK反编译得到Java源代码和资源文件
- Android APK反编译得到Java源代码和资源文件
- Android APK反编译得到Java源代码和资源文件
- Ubuntu下openldap服务器的部署步骤
- 系统性能优化之如何查找循环操作数据库
- hdu 2097 Sky数
- svn clean **出错解决办法
- The rules about Object IDs
- Android学习札记44:解读APK反编译后得到的布局文件
- DOS命令
- jsp中的referer
- 固定搭配
- teradata查看执行计划
- 工厂方法模式
- 一个有用的博客
- Akka2使用探索3(Duration 和 Deadline)
- 再探Android多应用间数据共享机制,自定义ContentProvider