如何从安卓APP里提取我们想用的图片等资源(雾)

最近在制作一个东西的时候要用到不少某个安卓APP里的图片图标,于是,和往常一样打开了PS,准备P个一样的图标……P了一会儿,感觉和原图果然有区别,怎么办?这时我突然想到:为什么我要P图呢?直接反编译这个APP,从源码结构目录里找资源不就好了!因为很久没碰过Java了,电脑里早就没有环境了。那么,就让我们从配置Java SDK开始吧!

下载安装


  1. 直接上官网开始下载Java SDK吧!点击:Java SDK下载传送门

  2. 然后我们点击下载图标进入下载页面


    点击进入下载页面
  3. 然后我们就看见了下载页面,但是在下载之前一定要先点击接受,再选择操作系统进行下载

    下载

  4. 下载完了点击安装即可。在安装过程中会先安装jdk(Java Development Kit,包含了编译java源码的编译器javac、java程序调试和分析的工具等),接着会安装jre(Java Runtime Environment,java运行环境,包含了java虚拟机,java基础类库等)

  5. 安装结束后,通常情况下我们可以看见在Java文件夹下有刚刚安装的jre文件夹和jdk文件夹,但是,细心点我们又发现,jdk文件夹下也有个jre文件夹而且比上上级目录中jre文件夹更大,这是为什么呢?这是因为Java下的jre是面向客户的运行环境,而jdk下的jre是面向开发者的运行环境,前面这套比后面那套少了服务器端的Java虚拟机。

  6. 最后,打开命令提示符,输入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,这个请按自己的安装目录如实填写。

JAVA_HOME

4. PATH:
这个变量可以使java不论写在系统哪个路径下都可以使用java命令。
我这里已经有了系统PATH变量,那么就直接点击编辑,然后在编辑环境变量面板点击新建。刚刚我们已经将Java SDK的目录存在了变量%JAVA_HOME% 里所以按自己的安装目录分别继续在其后加上\bin\jre\bin,新建这样的两个环境变量,然后用“上移”将这两个变量值移到最上面

PATH

5. CLASSPATH
这是java加载类(class or lib)路径,只有类在CLASSPATH中,java命令才能识别。那同上操作过程,这里是新建CLASSPATH,然后变量值请写上.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;或者直接写.;%JAVA_HOME%\lib;,这里按;分号来区别不同文件,而前面的.表示当前文件夹。
(当然,如果前面没有PATH这个变量的,也可以类比创建CLASSPATH的方式来填写加载目录)

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!”。切记,文件名一样要与类名一致!

test

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

  1. 点击onekey-decompile-apk进入GitHub中此项目的页面,下载onekey-decompile-apk.zip, 然后解压到你知道的文件夹

    下载反编译工具

  2. 将apk文件放到onekey-decompile-apk目录下

  3. 将apk文件拖拽到_onekey-decompile-apk.bat上


    开始反编译
  4. 执行完成后:

  • 会在onekey-decompile-apk目录下生成和apk同名的目录(放置了apktools反编译出来的东西)
  • 会在onekey-decompile-apk目录下生成和apk同名的jar文件(dex2jar反编译出来的class)
  1. 最后打开,一般res文件夹里放的便是图片视频之类的资源啦(但是里面貌似还有很多东西?)!

其实APK可以直接将其.apk的后缀名改为.zip进行解压,也能看到一些应用内的视频或是图标,但是这样做,你会发现里面的大多XML文件打开时为乱码,并且更多文件为二进制文件。所以我们需要进行反编译。并且,Google在发现这种轻易便能反编译看到源码的情况对开发者不是很友好,便增加了一个“混淆代码”的功能,使反编译得到的代码更难理解。(厉害了我的哥,那JS怎么办……)但是对于只是寻找图片、音频、视频资源的我们来说已经足够了(但还有些链接资源,就需要自己翻看XML文件了)。

最后我想说,其实我觉得最好用的APK反编译软件不在这,我偶然在手机上发现了一款叫Show Java的安卓应用,一直有在更新,而且反编译起来很快,不易报错或崩溃,比这些好用多了……
(但不是说这一篇只要这一句话就够了 _(:з丿∠)_ 毕竟实际反编译是会出很多问题的)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,380评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 暮春的夜晚还有有些凉意的,朋友约去夜排档吃龙虾,便披了件外套匆匆出了门。 一路上各种排挡的吆喝声不断,呲呲作响的是...
    程佳平阅读 301评论 0 4
  • 我知道总有一天 我会和你相遇 或许,是明媚的阳光 或许,是和煦的春风 也或许,是浪漫的雨夜 来为我们见证 我知道总...
    鹰胆鸽魂阅读 343评论 2 5
  • 【时间管理】G175易效能线下课 第4周 【第4周检视】 (20171106周一~20171112周日) 一、【好...