说明

好久没有写博客了,马上该找工作了,一方面想记录下自己的想法,一方面整理下掌握的技能,所以把这个好习惯重新捡起来。

学习Android是从去年做的小小客户端,之前还是过于自信了,看了点安卓的皮毛就开始做,一边抄 一边改,做的一塌糊涂。最近开始正式的学习,看了《安卓开发精要》,才开始明白安卓的设计模式和应用规范。所以,不管什么技术,读书还是很重要的,不要自以为是。

学习了一段时间,想找找一些成熟软件的源代码看看(当然最好还是看开源实现的,这个就是一时兴起吧),所以有了这篇。这篇不是什么标准教程,只是记录下自己学习的过程,以备之后查询,所以,轻喷。

一、工具准备

1、apktool: https://code.google.com/p/android-apktool/

apktool主要是用于反编译apk文件的,得到的是smail格式的源码和解析得到的资源文件,主要用处可能还是用来修改apk的资源文件, 然后重新编译,也可以调试smail代码,不过好像在这里用不到。下面贴个说明:

It is a tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications; it makes possible to debug smali code step by step. Also it makes working with app easier because of project-like files structure and automation of some repetitive tasks like building apk, etc.

It is NOT intended for piracy and other non-legal uses. It could be used for localizing, adding some features or support for custom platforms and other GOOD purposes. Just try to be fair with authors of an app, that you use and probably like.

2、dex2jar: https://code.google.com/p/dex2jar/

简单点说,就是把apk中的dex文件还原成jar包,主要是方便使用jd-gui查看,其实dex文件也是用.claas文件生成的,这个步骤不过是逆向生成过程。

3、jd-gui: http://jd.benow.ca/

这个工具主要作用是查看jar包中文件的源代码,原理就是反编译.class文件得到原始java文件,可以导出放到eclipse中观看,不过和smail文件不同,是不能执行的。

二、使用方法


1、apktool


(1)安装jdk,这个讲的很多了,不用多说。 (2)解压下载的apktool的压缩包,里面有4个文件夹:

(3)windows下使用的话需要的是apktool1.5.2中的apktool.jar和带windows文件夹中的两个文件aapt.exe和apktool.bat,把这3个文件放到任意一个目录(可以将这个目录添加到PATH变量中,在cmd中可以直接使用,不用再输入完整路径),linux中用法类似吧。

(4)使用方式:打开cmd,输入apktool,显示这个命令的用法,详细的可以自己查看,一般用到的有2个:

a.decode

该命令用于进行反编译apk文件,一般用法为
apktool d <file.apk> <dir>
<file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk
<dir>代表了反编译后的文件的存储位置,比如C:\MusicPlayer
如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>
这样就会强行覆盖已经存在的文件

b.build

该命令用于编译修改好的文件,一般用法为
apktool b <dir>
这里的<dir>就是刚才你反编译时输入的<dir>(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。

c.install-framework

该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题

2、dex2jar

贴个说明,懒死我算了。。

  1. Download dex2jar fromhttp://code.google.com/p/dex2jar/downloads/list
  2. Extract dex2jar-version.zip to a folder. for example/home/panxiaobo/,C:\
    unzip -x dex2jar-version.zip -d /home/panxiaobo
  3. use dex2jar to generate .jar file. dex2jar will generate a file namedsomeApk-dex2jar.jarin the working folder.
     linux sh /home/panxiaobo/dex2jar-version/d2j-dex2jar.sh /home/panxiaobo/someApk.apk windows C:\dex2jar-version\d2j-dex2jar.bat someApk.apk
  4. use a decompiler to view the source.
    • jd-gui
    • JAD

3、jd-gui


这个最简单了,得到jar包直接拖到jd-gui.exe中就可以了。

三、查看过程


1、随便找一个apk文件:
2、使用dex2jar:
好像命令deprecated了,先这样用吧。 3、之后目录下回生成一个jar文件,直接拖到jd-gui中查看就好了,最后效果是这样的:

更多相关文章

  1. H5与Android和ios的交互
  2. [置顶] android中图片的三级cache策略(内存、文件、网络)之二:内存
  3. AndroidStudio mipmap图片大小
  4. Android资源管理框架(Asset Manager)简要介绍和学习计划
  5. Android(安卓)SQLiteException: near "": syntax error (code 1)
  6. 基于Gradle支持Android(安卓)Studio的蒲公英自动上传task
  7. Android开发调试无法连接到夜神模拟器的解决方法
  8. 【Android:简单夜间模式切换实现】夜间模式切换,完整代码奉上!
  9. 关于android 根据系统语言更改 app名字和其他配置

随机推荐

  1. Android中SimpleAdapter,ArrayAdapter和Ba
  2. Android(安卓)OOM以及GC的一些建议
  3. android activity的4种启动模式
  4. android触摸屏事件手势操作滑动处理
  5. Android(安卓)Studio打包时如何将版本号
  6. Android--隐藏状态栏图标
  7. LinearLayout中的控件两端对齐
  8. Android(安卓)8.0 Oreo 画中画模式
  9. 解决Could not execute method of the ac
  10. android屏幕颜色过滤调节(可用于护眼模式)