站在巨人的肩膀上學習Android開發

來源:互聯網
上載者:User

        我們知道,一開始最好的學習方法是模仿,尤其是模仿巨人。那說到Android開發的模仿自然就是分析並研究主流程式的布局、實現方法,進而提升自己的技術。


第一招----逆向工程

         要分析“巨人”們的軟體,自然免不了逆向工程,即將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  smaliitleaks@ITLeaks $ ls weixin/res/ -a.                     layout       values-id       values-th..                    layout-hdpi  values-in       values-tranim                  layout-ldpi  values-it       values-v11color                 layout-mdpi  values-iw       values-v14drawable              layout-v11   values-ja       values-vidrawable-480dpi       raw          values-ko       values-w360dpdrawable-640dpi       values       values-land     values-w480dpdrawable-en-hdpi      values-ar    values-large    values-w500dpdrawable-hdpi         values-de    values-ldpi     values-w600dpdrawable-land         values-en    values-mdpi     values-w720dpdrawable-land-hdpi    values-es    values-ms       values-xhdpidrawable-mdpi         values-fr    values-pl       values-xlargedrawable-xhdpi        values-hdpi  values-pt       values-zh-rCNdrawable-zh-rCN-hdpi  values-he    values-ru       values-zh-rTWdrawable-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.zipunzip -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.apkI: 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.apkI: 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

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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.