站在巨人的肩膀上学习Android开发

我们知道,一开始最好的学习方法是模仿,尤其是模仿巨人。那说到Android开发的模仿自然就是分析并研究主流程序的布局、实现方法,进而提升自己的技术。


第一招----逆向工程


         要分析“巨人”们的软件,自然免不了逆向工程,即将APK程序转化为我们可以看的懂得源码。这个google官方已经帮我们做好了工具,apktool就是一款很好的逆向工具。

         下载地址为:http://pan.baidu.com/s/1kTqRhaR

我们以分析微信为例来说明这个工具的使用:

        你只需执行如下命令,即完成了反汇编逆向工作。完成后工具会生成weixin目录。 

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. apktool decode weixin.apk  

        在目录里,你就可以看到软件的各种资源文件,包括布局文件。有了这些资源文件,自己做出和微信一模一样的界面就易如反掌了,当然程序的重点在代码逻辑,不在界面。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. itleaks@ITLeaks:/tmp$ ls weixin/  
  2. AndroidManifest.xml  apktool.yml  assets  lib  res  smali  
  3. itleaks@ITLeaks $ ls weixin/res/ -a  
  4. .                     layout       values-id       values-th  
  5. ..                    layout-hdpi  values-in       values-tr  
  6. anim                  layout-ldpi  values-it       values-v11  
  7. color                 layout-mdpi  values-iw       values-v14  
  8. drawable              layout-v11   values-ja       values-vi  
  9. drawable-480dpi       raw          values-ko       values-w360dp  
  10. drawable-640dpi       values       values-land     values-w480dp  
  11. drawable-en-hdpi      values-ar    values-large    values-w500dp  
  12. drawable-hdpi         values-de    values-ldpi     values-w600dp  
  13. drawable-land         values-en    values-mdpi     values-w720dp  
  14. drawable-land-hdpi    values-es    values-ms       values-xhdpi  
  15. drawable-mdpi         values-fr    values-pl       values-xlarge  
  16. drawable-xhdpi        values-hdpi  values-pt       values-zh-rCN  
  17. drawable-zh-rCN-hdpi  values-he    values-ru       values-zh-rTW  
  18. drawable-zh-rTW-hdpi  values-hi    values-sw600dp  xml  

        上面有一个smali目录,它就是源码目录,而这种源码smali是一种中间语言,它既不是java语言,也不是java的汇编语言,而是apktool工具的可以识别的一种特殊语言。为了进一步转化为我们看得懂得java语言,可以使用dex2jar和jd-gui这两个工具。

        jd-gui下载地址:http://pan.baidu.com/s/1i3n7rPr

         dex2jar下载地址:http://pan.baidu.com/s/1B2lmY

       具体命令如下:

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. mv weixin.apk weixin.zip  
  2. unzip -o weixin.zip  
  3. //解压后就得到了classes.dex文件  
  4. dex2jarRootPath/dex2jar.sh classes.dex  
  5. //然后就得到了classes_dex2jar.jar文件  
  6. jd-gui classes_dex2jar.jar  

         同时,用户可以修改smali文件,然后重新用apktool生成 apk。在使用这个命令前必须下载另外一个工具aapt,apktool会用到这个工具。

         大家可以在这里下载:http://pan.baidu.com/s/1i37kiVz

         最后,打包的具体命令是:

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. itleaks@ITLeaks:/tmp$ apktool b Filer/ tmp.apk  
  2. I: Checking whether sources has changed...  
  3. I: Checking whether resources has changed...  
  4. I: Building apk file...  
  5. itleaks@ITLeaks:/tmp$   

         当然,有些程序是没法重新打包回apk,比如微信,这是因为它在resources里添加了自定义的一些变量,而这些变量在plugin文件中定义,apktool工具自然找不到。比如下面的Widget.AppCompat.Base

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. itleaks@ITLeaks:/tmp$ apktool b weixin/ tmp.apk  
  2. I: Checking whether sources has changed...  
  3. I: Checking whether resources has changed...  
  4. I: Building resources...  
  5. /tmp/weixin/res/values/styles.xml:59: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.  
  6. /tmp/weixin/res/values/styles.xml:275: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.  
  7. /tmp/weixin/res/values/styles.xml:467: error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Base'.  

第二招----查看view布局


         Android还提供了另外一个很强大的工具hierarchyviewer,这个工具的原理我在屏幕自由截图文章中有大概描述过,感兴趣的可以去看看那篇文章。这个工具在android-sdk/tools里可以找到。这个工具究竟干什么用的?它是用来查看程序的UI的,具体使用过程如下:

    1)执行命令启动后,软件会列出所有正在运行的程序  


    2)选择你感兴趣的程序,双击即可查看该程序的UI,该界面每个方框代表一个view,并每个方框下都显示了该view

的id,这样就可以根据id很好的找出该view在layoutxx.xml中对应的view.


    3)然后选择某个view,双击即可看到该view的UI。


    4)单击右边的layout还可以看到具体view的layout信息,比如高度,宽度,位置等信息。

   

    有了这两个工具,大家应该就能比较方便的分析市面上任意程序的界面构成了。


附录:

        以上的apktool, aapt,大家最好将这两个文件拷贝到执行路径,比如/usr/bin,这样apktool才能在执行中找到aapt这个文件。还有,本文中的所有工具都是linux下的,如果想在window下执行,大家可以搜索并下载window版本。需要注意的是,hierarchyviewer工具是基于adb的,要想使用它,必须保证,adb devices能够显示到你要访问的Android设备,一般出厂设备默认是没法使用的,需要root。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值