最近在制作一个东西的时候要用到不少某个安卓APP里的图片图标,于是,和往常一样打开了PS,准备P个一样的图标……P了一会儿,感觉和原图果然有区别,怎么办?这时我突然想到:为什么我要P图呢?直接反编译这个APP,从源码结构目录里找资源不就好了!因为很久没碰过Java了,电脑里早就没有环境了。那么,就让我们从配置Java SDK开始吧!
下载安装
直接上官网开始下载Java SDK吧!点击:Java SDK下载传送门
-
然后我们点击下载图标进入下载页面
-
然后我们就看见了下载页面,但是在下载之前一定要先点击接受,再选择操作系统进行下载
下载完了点击安装即可。在安装过程中会先安装jdk(Java Development Kit,包含了编译java源码的编译器javac、java程序调试和分析的工具等),接着会安装jre(Java Runtime Environment,java运行环境,包含了java虚拟机,java基础类库等)
安装结束后,通常情况下我们可以看见在Java文件夹下有刚刚安装的jre文件夹和jdk文件夹,但是,细心点我们又发现,jdk文件夹下也有个jre文件夹而且比上上级目录中jre文件夹更大,这是为什么呢?这是因为Java下的jre是面向客户的运行环境,而jdk下的jre是面向开发者的运行环境,前面这套比后面那套少了服务器端的Java虚拟机。
-
最后,打开命令提示符,输入
java -version
按回车,即可看到Java SDK的版本信息,即安装成功。
环境变量
安装完了并不是结束了,因为此时Java编译和运行环境并非全局,无法通过命令行使用javac编译器编译你所写的Java代码或是运行Java程序,还有全局环境变量需要设置。
1. 我的电脑右键——>属性——>高级系统属性——>环境变量。
2. 开始
我们需要设置三个系统变量,分别为PATH、CLASSPATH、JAVA_HOME,不区分大小写,如果有就选择编辑,没有就选择新建。
3. JAVA_HOME:
这个变量表示Java jdk的目录,点击新建,因为我的Java jdk安装在了D:\CodeTools\Java\jdk
目录下,所以我将变量JAVA_HOME
的变量值写为D:\CodeTools\Java\jdk
,这个请按自己的安装目录如实填写。
4. PATH:
这个变量可以使java不论写在系统哪个路径下都可以使用java命令。
我这里已经有了系统PATH变量,那么就直接点击编辑,然后在编辑环境变量面板点击新建。刚刚我们已经将Java SDK的目录存在了变量%JAVA_HOME%
里所以按自己的安装目录分别继续在其后加上\bin
和\jre\bin
,新建这样的两个环境变量,然后用“上移”将这两个变量值移到最上面。
5. CLASSPATH
这是java加载类(class or lib)路径,只有类在CLASSPATH中,java命令才能识别。那同上操作过程,这里是新建CLASSPATH,然后变量值请写上.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
或者直接写.;%JAVA_HOME%\lib;
,这里按;
分号来区别不同文件,而前面的.
表示当前文件夹。
(当然,如果前面没有PATH这个变量的,也可以类比创建CLASSPATH的方式来填写加载目录)
6. 检验变量设置是否成功
这里我们用一个简易java程序来检查变量是否设置成功。即新建文本文档,在里面输入以下代码:
public class test {
public static void main(String[] args){
System.out.println("Hello World!");
}
}
保存,将文件后缀名从.txt
改为.java
,记住文件存放目录。这里我将其放在E盘根目录内,文件名为test.java。然后打开命令行,将目录调到E盘,输入javac test.java
,回车,可以看见编译已成功,然后输入java test
来运行这个java程序的test类,即输出“Hellow World!”。切记,文件名一样要与类名一致!
7. 注意
若出现“javac不是内部或外部命令,也不是可运行的程序或批处理文件”的报错,就要:
- 检查环境变量是否设置正确
- 各路径是否正确
- 是不是漏了什么
%
、.
或者;
-
jdk\bin
文件夹下有没有javac.exe
这个可执行文件
如果以上都正确,却还是无法成功,那么我建议你删去%JAVA_HOME%
系统变量,将所有的%JAVA_HOME%
全改回为你的Java jdk的安装完整目录,比如我的是D:\CodeTools\Java\jdk
。或者直接用“浏览”定位文件夹来设置变量值。
反编译APK
那么,一切准备工作做完后,我们终于可以开始正题了!(好长的准备啊,要不要改题目啊……)
反编译Android APK一般会用到三个工具:
工具 | 作用 |
---|---|
apktool | 资源文件获取,可以提取出图片文件和布局文件进行使用查看 |
dex2jar | 将apk反编译成Java源码(classes.dex转化成jar文件) |
jd-gui | 查看APK中classes.dex转化成出的jar文件,即源码文件 |
但是,一个个用太麻烦了,我们不是来水篇幅的,而是追求实用与效率(有爱者可以自己查看使用方法,也就是几句命令行操作)。所以这次,我们将用到的工具是将这三个工具整合在一起的onekey-decompile-apk。
-
点击onekey-decompile-apk进入GitHub中此项目的页面,下载onekey-decompile-apk.zip, 然后解压到你知道的文件夹
将apk文件放到onekey-decompile-apk目录下
-
将apk文件拖拽到_onekey-decompile-apk.bat上
执行完成后:
- 会在onekey-decompile-apk目录下生成和apk同名的目录(放置了apktools反编译出来的东西)
- 会在onekey-decompile-apk目录下生成和apk同名的jar文件(dex2jar反编译出来的class)
- 最后打开,一般res文件夹里放的便是图片视频之类的资源啦(但是里面貌似还有很多东西?)!
其实APK可以直接将其
.apk
的后缀名改为.zip
进行解压,也能看到一些应用内的视频或是图标,但是这样做,你会发现里面的大多XML文件打开时为乱码,并且更多文件为二进制文件。所以我们需要进行反编译。并且,Google在发现这种轻易便能反编译看到源码的情况对开发者不是很友好,便增加了一个“混淆代码”的功能,使反编译得到的代码更难理解。(厉害了我的哥,那JS怎么办……)但是对于只是寻找图片、音频、视频资源的我们来说已经足够了(但还有些链接资源,就需要自己翻看XML文件了)。
最后我想说,其实我觉得最好用的APK反编译软件不在这,我偶然在手机上发现了一款叫Show Java的安卓应用,一直有在更新,而且反编译起来很快,不易报错或崩溃,比这些好用多了……
(但不是说这一篇只要这一句话就够了 _(:з丿∠)_ 毕竟实际反编译是会出很多问题的)