Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android ClassyShark vs ApkTool

Android ClassyShark vs ApkTool

編輯:關於Android編程

引子

作為程序員,借鑒可能是工作中所必須碰到的事情,程序員的世界裡,更多的不是從無到有,而是從有到優。那麼當我們在做一些需求或者架構調整時,可能需要參考別的成熟公司的做法,例如淘寶,美團,蘑菇街等。
那麼怎麼來查看別人的apk架構以及源碼實現。沒錯,反編譯!那麼在ClassyShark出來之前,我們可能都是用的apktool,現在我們來對比下這兩個工具之間的優劣對比。
我們以淘寶apk為例,分別用這兩個工具進行解析。(基於mac系統)

兩者PK

一.用ClassyShark解析淘寶apk

1.下載地址

2.運行命令

java -jar ClassyShark.jar

彈出如下界面:

ClassyShark界面

3.打開淘寶apk,如圖:

淘寶apk結構

分析上圖,左邊目錄欄中主要顯示了三部分內容,manifest文件,classes.dex文件集(為什麼說是文件集,因為當apk開發采用Mutidex時會產生多個dex文件,不知淘寶為何沒有采用Mutidex)和so引用集。

4.查看淘寶manifest文件,如下圖:

淘寶manifest文件

在決定采用那種第三方支持,例如推送時,我們常常會參考別的一些成熟公司,上圖紅框中可以明顯看出是小米推送的相關權限聲明,從這可以了解淘寶也是引入了小米推送的。

5.查看class文件的源碼

AllsparkLoader類源碼

上圖可以看出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部分的組成時,只需在圖上點擊相應部分。

Paste_Image.png

我們看到了其中有阿裡最近開源出來的react庫weex(聲稱比rn好用)。當然如果你想更詳細的查看就在右邊目錄中挨個找,圖形只是一個總體浏覽。

7.使用總結
總的來說ClassyShark的使用非常便捷,只需一個命令行,然後打開對應的apk即可,而且顯示的內容非常有條理,非常適合在對別人apk整體架構借鑒時使用。

二.用ApkTool解析淘寶apk

用apktool反編譯還需要另外一些工具集:

apktool (用於獲取資源文件)

apktool安裝圖解
按上圖進行安裝
- dex2jar (獲取源文件jar包)
- JD-GUI (反編譯源文件jar包查看源代碼)

完成以上工具集的下載安裝後,就可以開工了。

1.用apktool解析apk資源

apktool d xxx.apk

在終端運行以上命令,效果如下圖:

apktool解析apk資源文件

那麼運行完命令後會產生一個文件夾,對應的內容為以下:

apktool反編譯產生的資源文件夾

可以看到apktool反編譯後,能直接拿到apk中的資源文件,如drawable之類,但是ClassyShark並不能。(記得以前在學校做app時還經常去其他app上摳圖用,就是用這個方法….)

到這裡我們還不能夠看到對應的源碼,要看源碼還需要以下幾步。

2.dex2jar獲取源文件jar包

首先將你的apk文件改為zip文件格式,然後解壓出來,其中會有一個classes.dex文件,接下來我們就是從這個文件中獲取源文件。將classes.dex文件拷貝到你的dex2jar文件夾下,如下圖:

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文件,結果如下圖:

AllsparkLoader類源碼

這裡特意截取了之前用ClassyShark解析過的AllsparkLoader類,通過對比,我們不難發現,雖然也不能解析出混淆後的變量名,但是內容會比ClassyShark更加詳細,可以看出一些代碼邏輯。

對比兩者的優缺點

ClassyShark:
優點:
1.使用非常便捷,只需一個命令行喚起界面即可。
2.源碼目錄結構清晰,並且可以通過圖形化查看整個apk的組成架構
缺點:
1.源碼過於簡略,不能獲取相應代碼邏輯
2.不能獲取到資源文件

ApkTool:
優點:
1.可以獲取較完整的資源文件集
2.源碼較為詳細
缺點:
1.使用較為復雜,需要多個工具結合
2.不能較好查看整個apk的架構邏輯

總結

ClassyShark,ApkTool兩者各有優劣,開發者在開發過程中可以根據實際需求斟酌使用,當然有些時候兩者配合使用說不定會更好哦~

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved