【Android实测】分析apk过程记录(一)
最近碰到一个很奇怪的问题,合作方提供的apk运行良好,但提供的对应的源码运行结果与apk不一致,然后他们又找不到对应版本的代码。
今天尝试分析apk,看看能不能看出来点关键的东西。
首先,我拿到了他们的应用开发小工具,其中包括这些功能:
- 签名、安装及启动系统应用
- 源码反编译
- APK反编译
- 系统签名
- 命令行
- 文件MD5码计算
在分析apk过程中,只用到了“源码反编译”和“APK反编译”两个功能,简单目测了一下他的实现方法和各自的作用。
源码反编译
先贴他执行时的命令行显示:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
D:\Program Files\AppTool>tools\dex2jar\dex2jar.bat classes.dex
D:\Program Files\AppTool>tools\jd-gui\jd-gui.exe classes_dex2jar.jar
D:\Program Files\AppTool>exit
然后发现弹出一个窗口,内容如图:
这个图为了视觉效果,缩放了一下,可以看到这个反编译的结果是class文件。
APK反编译
仍然先看执行时的命令行显示:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
D:\Program Files\AppTool>cd tools\apktool
D:\Program Files\AppTool\tools\apktool>apktool.bat d -f E:\Work-Point\ShowWeb.apk E:\Work-Point\ShowWeb
D:\Program Files\AppTool\tools\apktool>exit
执行完成后,在目录下得到了一些文件夹:
贴个关键文件夹com/example/showweb
底下的内容:
再贴一个根目录的内容:
查看及分析
- 第一步之后:
- 可以查看是Java代码。这里我可以看到的是Activity中进行了设置布局、设置属性参数、自定义监听事件等方法。阅读class文件和Java文件,在简单代码里看不出太大区别,思路第一。
- 第二步之后:
- 可以查看Manifest文件,关于Activity和Application等配置,在这里都能看到不是乱码。
- 可以查看布局文件,
res/layout
目录下的文件,在这里看不是乱码。 - 可以查看编译版本,
apktool.yml
文件使用记事本打开,可以看到apk的versionName、minSdkVersion、targetSdkVersion、packageInfo等信息。
这里需要注意的是,这里不去做反编译操作而是直接解压的话,只可以看到drawable的图片文件,layout、values等处的xml包括manifest直接用记事本程序打开都是乱码。
然后我想看的东西都看到了,也有了一些对实现或者说仿写这个app的灵感、思路。主要还是因为简单。
那么接下来重头戏,如果没有他们的应用开发小工具,我要怎么做才能看到这些东西?
未完待续。