編輯:關於Android編程
1.下載地址
2.運行命令
java -jar ClassyShark.jar
彈出如下界面:
3.打開淘寶apk,如圖:
分析上圖,左邊目錄欄中主要顯示了三部分內容,manifest文件,classes.dex文件集(為什麼說是文件集,因為當apk開發采用Mutidex時會產生多個dex文件,不知淘寶為何沒有采用Mutidex)和so引用集。
4.查看淘寶manifest文件,如下圖:
在決定采用那種第三方支持,例如推送時,我們常常會參考別的一些成熟公司,上圖紅框中可以明顯看出是小米推送的相關權限聲明,從這可以了解淘寶也是引入了小米推送的。
5.查看class文件的源碼
上圖可以看出ClassyShark工具將類的相關方法和變量聲明進行了結構調整,分為三部分顯示fields,constructors,methods。結構會更清晰,但是也不難發現源碼基本都是省略號(看來只能看類基本的組成而已- -)。另外有個小技巧,雙擊對應的變量對象可以快速跳轉至該對象class文件。
6.圖形化查看整個apk的構成(這也是我最喜歡的功能)<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPr2r09Kx37XExL/CvMC4dGFix9C7u7PJTWV0aG9kcyBjb3VudKOsyOfPws28o7o8L3A+DQo8cD48aW1nIGFsdD0="apk的構成餅圖" src="http://upload-images.jianshu.io/upload_images/1906041-934d69b10cb5e06e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" title="\" />
有時候我們可能只想了解別人的架構,相關組成部分的占比權重,上圖能很清晰的表現出來。如果我們想了解占比最高的taobao api部分的組成時,只需在圖上點擊相應部分。
我們看到了其中有阿裡最近開源出來的react庫weex(聲稱比rn好用)。當然如果你想更詳細的查看就在右邊目錄中挨個找,圖形只是一個總體浏覽。
7.使用總結
總的來說ClassyShark的使用非常便捷,只需一個命令行,然後打開對應的apk即可,而且顯示的內容非常有條理,非常適合在對別人apk整體架構借鑒時使用。
用apktool反編譯還需要另外一些工具集:
apktool (用於獲取資源文件)
按上圖進行安裝
- dex2jar (獲取源文件jar包)
- JD-GUI (反編譯源文件jar包查看源代碼)
完成以上工具集的下載安裝後,就可以開工了。
1.用apktool解析apk資源
apktool d xxx.apk
在終端運行以上命令,效果如下圖:
那麼運行完命令後會產生一個文件夾,對應的內容為以下:
可以看到apktool反編譯後,能直接拿到apk中的資源文件,如drawable之類,但是ClassyShark並不能。(記得以前在學校做app時還經常去其他app上摳圖用,就是用這個方法….)
到這裡我們還不能夠看到對應的源碼,要看源碼還需要以下幾步。
2.dex2jar獲取源文件jar包
首先將你的apk文件改為zip文件格式,然後解壓出來,其中會有一個classes.dex文件,接下來我們就是從這個文件中獲取源文件。將classes.dex文件拷貝到你的dex2jar文件夾下,如下圖:
為了解決一個ma╧y"/kf/yidong/wp/" target="_blank" class="keylink">WPPwnBlcm1pc3Npb261xM7KzOLQ6NKqz8jUy9DQ0tTPwsP8we48L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;">
sudochmod777d2j-jar2dex.sh
之後就可以進行獲取jar包,運行以下命令:
./d2j-dex2jar.shclasses.dex
最終在dex2jar文件夾下得到源文件的jar包classes-dex2jar.jar文件。我們就差最後一步,將jar包反編譯獲取java文件。
3.JD-GUI獲取java源文件
用jd-gui工具打開對應classes-dex2jar.jar文件,結果如下圖:
這裡特意截取了之前用ClassyShark解析過的AllsparkLoader類,通過對比,我們不難發現,雖然也不能解析出混淆後的變量名,但是內容會比ClassyShark更加詳細,可以看出一些代碼邏輯。
ClassyShark:
優點:
1.使用非常便捷,只需一個命令行喚起界面即可。
2.源碼目錄結構清晰,並且可以通過圖形化查看整個apk的組成架構
缺點:
1.源碼過於簡略,不能獲取相應代碼邏輯
2.不能獲取到資源文件
ApkTool:
優點:
1.可以獲取較完整的資源文件集
2.源碼較為詳細
缺點:
1.使用較為復雜,需要多個工具結合
2.不能較好查看整個apk的架構邏輯
ClassyShark,ApkTool兩者各有優劣,開發者在開發過程中可以根據實際需求斟酌使用,當然有些時候兩者配合使用說不定會更好哦~
一、概述 這一章先來點有意思的百度地圖應用示例,然後再分章詳細介紹用C#開發Android App的各種基本技術。 本章以百度官網2016年1月發布的
前面照著android系統的裁剪圖片的功能自己寫了一個相似的工具。功能是大體上實現了,但留下了一個調用的問題:如何從我的程序調用這個裁剪工具,並且獲得裁剪後的圖片呢?其實
效果如下圖:1. MainActivity.javapackage com.example.chartview;import java.util.ArrayList;im
前提條件:已經安裝了JDK 6.0、android SDK、NDK r9和eclipsele4.2開發環境.推薦下載Android開發的綜合套件adt-bundle-wi