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

必先利其器

需要用到的核心工具集是 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值