【写在前面】
今天在做项目时遇到一个困难,需求是这样的:
模仿csdn客户端,实现app端查看博文内容,要求不使用H5混合开发实现文章在界面上的显示;
图1-1 简书博文界面
我想到了简书客户端有实现类似的功能,虽然不知道它是不是用原生开发的,但是想要尝试学习一下,就看了一下反编译,现在将反编译的操作写成这篇文章供大家参考。
PS: 如果大家知道如何使用非H5方式实现富文本查看功能,希望大家在文章底下评论留言,谢谢大家了!
【工具下载】
http://download.csdn.net/detail/wj_november/9534211
http://download.csdn.net/detail/wj_november/9534292
【使用操作】
下载好我们的软件并安装后,我们的软件是这样的:
图2-1 反编译工具
我们的反编译主要分为两个部分,主要是:
资源文件的反编译
java代码的反编译
我们打开AndroidCrackTool软件,选择好我们要反编译的apk:
图2-2 反编译资源文件
图2-3 资源文件反编译成功
点击执行按钮,出现如图2-3说明资源文件反编译成功。
这时候可能有的同学会说,用普通的解压软件解压也可以得到资源文件。这里我们要注意,解压软件解压出来的文件是字节码,我们对比一下两者的区别:
图2-4 AndroidCrackTool反编译结果
图2-5 普通压缩软件解压缩结果
然后我们打开AndroidManifest.xml,看一下二者文件内容有何不同:
图2-6 AndroidCrackTool反编译后的Manifest.xml文件
图2-7 普通压缩软件解压缩后的Manifest.xml文件
可以看到,我们的代码经过编译后,转为了十六进制的字节码。
=java代码反编译=
这一步操作,我们要用到我们之前用普通解压软件解压后得到的classes.dex文件,如下图:
图2-8 解压缩后得到的classes.dex文件
这个dex的具体机制我目前不是很懂,但是之前看过一些博客,讲的是,我们的代码经过编译后,会压缩成一个.jar文件,我们可以理解为另外一种格式的压缩文件,类似于.zip或.rar,为了不让我们的代码轻易被他人解压缩窃取,Android将.jar加了一个叫做“壳”的东西,加壳后的.jar文件就是.dex文件了,我们可以把.dex文件理解为加密过的压缩文件,一般我们需要特殊的软件进行去壳操作,我们用到的软件就是dex2jar.
我们将之前得到的classes.dex文件,放入dex2jar文件夹,然后打开终端,输入命令进行去壳操作:
cd dex2jar文件夹
sh dex2jar.sh classes.dex
然后,我们用JD-GUI工具打开classes_dex2jar.jar文件,这时候就得到了源码:
图2-11 得到源码
当然我们会遇到这样的代码:
图2-12 代码混淆
这种情况叫“代码混淆”,为了防止我们写的代码被反编译后窃取,android设置了最后一层屏障,就是将我们原来对类、变量、方法的命名以abcd的字母来代替,让其失去原有的意思,防止我们的代码被别人读懂。但是这个对于有多年项目经验的大神们来说,并不构成障碍,因为写代码写得多了,根据其代码逻辑,大致可以判断代码的含义,而且也可以通过import进来的包,理解其作用。
奈何我只是一只菜菜的安卓小白,并不能很容易地读懂代码的含义,看来想要从简书app中学习到原生加载富文本的功能,尚需花费时日了。
本次反编译工具的使用教程就到这里,如果本文有出现错误的地方,欢迎大家多多指正!
另外,如果大家懂得如何用原生的方法实现富文本的加载,很感谢您在文章下面评论 ^_^