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


            我们知道,一開始最好的学习方法是模仿,尤其是模仿巨人。

    那说到Android开发的模仿自然就是分析并研究主流程序的布局、实现方法。进而提升自己的技术。


    第一招----逆向project


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

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

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

            你仅仅需运行例如以下命令,即完毕了反汇编逆向工作。完毕后工具会生成weixin文件夹。 

    apktool decode weixin.apk

            在文件夹里,你就能够看到软件的各种资源文件,包含布局文件。

    有了这些资源文件,自己做出和微信一模一样的界面就易如反掌了,当然程序的重点在代码逻辑,不在界面。

    itleaks@ITLeaks:/tmp$ ls weixin/
    AndroidManifest.xml  apktool.yml  assets  lib  res  smali
    itleaks@ITLeaks $ ls weixin/res/ -a
    .                     layout       values-id       values-th
    ..                    layout-hdpi  values-in       values-tr
    anim                  layout-ldpi  values-it       values-v11
    color                 layout-mdpi  values-iw       values-v14
    drawable              layout-v11   values-ja       values-vi
    drawable-480dpi       raw          values-ko       values-w360dp
    drawable-640dpi       values       values-land     values-w480dp
    drawable-en-hdpi      values-ar    values-large    values-w500dp
    drawable-hdpi         values-de    values-ldpi     values-w600dp
    drawable-land         values-en    values-mdpi     values-w720dp
    drawable-land-hdpi    values-es    values-ms       values-xhdpi
    drawable-mdpi         values-fr    values-pl       values-xlarge
    drawable-xhdpi        values-hdpi  values-pt       values-zh-rCN
    drawable-zh-rCN-hdpi  values-he    values-ru       values-zh-rTW
    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

           详细命令例如以下:

    mv weixin.apk weixin.zip
    unzip -o weixin.zip
    //解压后就得到了classes.dex文件
    dex2jarRootPath/dex2jar.sh classes.dex
    //然后就得到了classes_dex2jar.jar文件
    jd-gui classes_dex2jar.jar
    

             同一时候,用户能够改动smali文件,然后又一次用apktool生成 apk。在使用这个命令前必须下载另外一个工具aapt,apktool会用到这个工具。

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

             最后,打包的详细命令是:

    itleaks@ITLeaks:/tmp$ apktool b Filer/ tmp.apk
    I: Checking whether sources has changed...
    I: Checking whether resources has changed...
    I: Building apk file...
    itleaks@ITLeaks:/tmp$ 
    

             当然。有些程序是没法又一次打包回apk,比方微信,这是由于它在resources里加入了自己定义的一些变量,而这些变量在plugin文件里定义,apktool工具自然找不到。比方以下的Widget.AppCompat.Base

    itleaks@ITLeaks:/tmp$ apktool b weixin/ tmp.apk
    I: Checking whether sources has changed...
    I: Checking whether resources has changed...
    I: Building resources...
    /tmp/weixin/res/values/styles.xml:59: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
    /tmp/weixin/res/values/styles.xml:275: error: Error retrieving parent for item: No resource found that matches the given name 'Widget.AppCompat.Base'.
    /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。

             

    /********************************

    * 本文来自博客  “爱踢门”

    * 转载请标明出处:http://blog.csdn.net/itleaks

    ******************************************/


  • 相关阅读:
    C++学习笔记27,虚函数作品
    HDU
    POJ 2524 Ubiquitous Religions
    HDU-3839-Ancient Messages(DFS)
    thinkphp 删除所有缓存 Rumtime 以及 Html 静态缓存
    [AngularJS] Design Pattern: Simple Mediator
    [Javascript] Add a browser build to an npm module
    [Angular 2] ngrx/store
    [Typescript] Introduction to Generics in Typescript
    [AngularJS] angular-md-table for Angular material design
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5322618.html
Copyright © 2020-2023  润新知