关闭

反编译 apk 以学习研究相关实现——Fuubo 波纹动画实现

163人阅读 评论(0) 收藏 举报

必先利其器

需要用到的核心工具集是 apktooldex2jarjd-gui,其中 apktool 用于获取资源文件,dex2jar & jd-gui 用于获取 Java 代码。除此之外你还需要文本编辑器、解压缩软件,等。

WORK THROUGH

笔者从酷安网下载了 Fuubo 的 apk 文件 me.imid.fuubo-4.1.apk

首先获取资源文件,图片、xml 布局等等。一行命令就好。
文中不写命令的相对路径了,默认你已经配置好了环境变量,或者使用了绝对路径。

$ apktool d me.imid.fuubo-4.1.apk # d for decompile
I: Using Apktool 2.0.3 on me.imid.fuubo-4.1.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: <placeholder-to-hide-real-path>/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

apktool 比较过分,把 Java 代码直接反编译成了 smali 文件。字节码与今天主题无关,以下我们将获取 Java 源码。不过,如果你对 bytecode 非常感兴趣,我觉得 developerWorks 的一篇教程 讲的不错,而 Java bytecode instruction listings 词条 可以作为速查表。
dex2jar 不仅可以把 dex 文件转换为 samli (d2j-dex2smali.sh),也可以转换为 jar (d2j-dex2jar.sh)。

$ unzip me.imid.fuubo-4.1.apk -d output # 解压后的输出文件在 ./output/ 文件夹下
(omitting output…)
$ cd output
$ d2j-dex2jar.sh classes.dex
dex2jar classes.dex -> ./classes-dex2jar.jar
$ jd-gui classes-dex2jar.jar

这时你已经能看到 Java 代码了,点击 jd-gui 界面中的 File - Save All Sources,把所有源码保存到一个压缩包中,解压得到的压缩文件即可看到源码目录结构。需要注意的是,源项目使用的第三方库的代码,也被反编译到这个压缩包中了。
有的时候,比如闲鱼APP,解压 apk 会得到多个 dex 文件,那么对每个 dex 都要用 d2j 和 jd-gui 进行处理。

WORK LIKE A CHARM

通常通过字符串查找比较方便,但是 Fuubo 波纹动画的页面没有标识性的字符串。还好动画出现在运行应用之始,通过入口 Activity 开始往下找,还是很轻松地找到了。
通过对反编译后的代码的分析,最终找到 me.imid.fuubo.widget.SpreadView。在 me.imid.fuubo-4.1/res/layout/activity_login.xml 中有布局示例,在 me.imid.fuubo.ui.activity.LoginActivity 中有代码调用方法,剩下的都一目了然了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1081次
    • 积分:98
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论