apk分析利器:ClassyShark

碼頭工人 8年前發布 | 30K 次閱讀 Android開發 移動開發 ClassyShark

來自: http://w4lle.github.io/2016/02/15/ClassyShark——分析apk利器/

背景

對于一個感興趣的android非開源項目,通常使用逆向工程查看apk中的內容,俗稱反編譯。工具大概包括dex2jarJD-GUIapktoolprocyon,這些工具使用起來相對比較麻煩,如果我們只想知道該項目的基本框架、使用到哪些開源項目的話,那么就有些浪費時間。
對于一些大廠的項目,我們還比較關心的是用到了哪些新的框架和技術,對于新技術的流行程度和使用普遍程度有個比較好的把握,指導是否需要進行深度的使用學習。比如最近的比較流行的rxjava,熱更新技術等等。

ClassyShark

ClassyShark是一款可以查看Android可執行文件的瀏覽工具,支持.dex, .aar, .so, .apk, .jar, .class, .xml 等文件格式,分析里面的內容包括classes.dex文件,包、方法數量、類、字符串、使用的NativeLibrary等。

使用方法

  1. 打開apk文件java -jar ClassyShark.jar -open <YOUR_APK.apk>
  2. 將生成的所有數據導出到文本文件里java -jar ClassyShark.jar -dump <BINARY_FILE>
  3. 將指定類生成的文件導出到文本文件里java -jar ClassyShark.jar -dump <BINARY_FILE> <FULLY_QUALIFIED_CLASS_NAME>
  4. 打開ClassyShark,在GUI界面展示某特定的類
  5. java -jar ClassyShark.jar -open <BINARY_FILE> <FULLY_QUALIFIED_CLASS_NAME>
  6. 檢測APKjava -jar ClassyShark.jar -inspect <YOUR_APK.apk>
  7. 導出所有的字符串 java -jar ClassyShark.jar -stringdump <YOUR_APK.apk>

具體使用

以美團項目為例,讓我們看看能得到什么有用的信息

java -jar ClassyShark.jar -open ~/Downloads/group-351_3-meituan_.apk

美團項目中使用了MultiDex,并且classes.dex文件有3個,說明方法數肯定非常多。
美團的編譯版本非常新, 緊跟時代, 23版本(Android 6.0)。
并且TargetSdkVersion也是23版本,緊跟技術方向。
最低版本是16(Android 4.1), 4.1以下的手機無法運行。
而且有好多的so庫,有美團自己的,也有好多是第三方的庫。

可以看到9萬多個方法,怪不得會有3個classes.dex文件。
項目中應用了大量的第三方庫,并且一般都是主流的比較穩定的開源庫。
我們來看下都用到了哪些庫

  • ZXing二維碼識別庫;
    amap: 高德地圖;
  • PullToRefresh使用最廣的下拉刷新組件;
  • jackson, json解析庫;
  • NineOldAndroids Jake大神的android兼容庫
  • fresco,非死book出品的圖片處理庫,圖片加載節省很多內存,避免OOM。
  • RxJavajava響應式編程庫,再加上Square的Retrofit庫的支持,可以說未來就是rxjava的天下,目前市面上已經有很多基于rxjava的項目;我們團隊也將基于rxjava來開發項目;
    圈內最牛逼的開源公司Square,Jake大神所在的公司,可以毫不夸張的說,Square的開源項目使得Android開發提速了好幾年
  • okhttp網絡請求庫,已被官方采用;
  • retrofit非常牛逼的網絡請求庫,配合rxjava和lambda使用,代碼量減少90%;
  • otto事件總線;
  • picasso圖片加載庫;
  • dagger依賴注入框架;
  • ExpandableTextView可折疊的TextView
  • iflytek, 科大訊飛的語音集成;
  • ViewPagerIndicator還是Jake大神的項目,viewpager的滾動控件;
  • actionbarsherlock依然是Jake大神的項目,Actionbar的適配庫,不過已經過時了;
  • 華為推送
  • SystemBarTint狀態欄沉浸效果庫
  • 百度地圖
  • 新浪微博
  • 騰訊的QQ和微信
  • 大眾點評,已經合并一家,東西也得用;
  • umpay, 聯動優勢支付;
  • 支付寶;
  • andfix阿里出品的android熱更新框架;
  • flurry統計庫;
  • 小米推送
  • http-request網絡請求庫;
  • EventBus事件總線庫;
  • PhotoView放大縮小的圖片處理庫;
  • roboguice依賴注入框架,類似Dagger;
  • zip4j處理zip壓縮的庫;
    link異步task關聯庫,很像rxjava;

總結

從上面分析我們可見看出,美團是一個技術很開放的公司,對于框架的使用比較多,使用的基本都是主流的開發框架,減少開發成本,增強app的穩定性和體驗,對于我們來說,有很大的借鑒意義。比如,目前都在試水的熱更新框架,美團選擇了阿里的andfix,那么該技術方案肯定是得到了美團團隊的驗證;另外,美團團隊也是比較潮流的,Retrofit+Rxjava的潮流趨勢已經不可阻擋,美團已經開始使用;但是,從項目引用庫中我們也可以看到一些不足之處;比如,同一種框架引用了多種第三方庫,如網絡庫(okhttp,http-request),圖片加載庫(fresco,picasso),事件總線(EventBus, Otto),依賴注入(Dagger,roboguice),推送相關的庫等很多重復的庫,如果去掉重復的庫那么可以節省很多的編譯時間和apk包的大小;還有就是,我們基本可以斷定,美團團隊的內部并不能很好的統一,沒有有效的溝通,代碼開發很混亂,導致項目結構上的臃腫,重復庫的使用等等問題。

通過分析App的項目結構和引用庫的信息,我們大致掌握了該項目的架構,一些開發中的經驗和不足,拓寬下開發視野,發現一些好用的開源庫,增強我們的武器,這些都是我們在開發中可以借鑒的東西。

 本文由用戶 碼頭工人 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!