老司機談APK瘦身套路-專案優化篇

猴子搬來的救兵發表於2019-03-03

       在上一篇文章中,老司機帶領大家一起學習了圖片資源的瘦身套路,收到了很多中學生讀者的好評。
想了解的童鞋請點選:blog.csdn.net/mynameishua…
       這次,老司機繼續開車,給大家分享APK瘦身套路之專案優化篇。為了更好的跟大家說明瘦身套路,我把優化分為專案結構瘦身和程式碼瘦身兩部分。

這裡寫圖片描述

1.專案結構瘦身套路

套路一:引入庫的優化

  • 去掉無用的庫

       專案中如果apk支援的最低版本是API14,而程式碼中沒有用到高於api14的api就可以考慮去掉整個android support庫。

  • 最小化集SDK

       很多小夥伴在專案中都引入了友盟工具,但是很多時候我們往往只需要友盟分享,那麼我們可以把專案引入的友盟推送去掉,只整合友盟分享SDK,已達到精簡的目的。

套路二:Gradle優化配置

  • 使用minifyEnabled配置混淆程式碼

       使用AndroidStudio開發的小夥伴,可以在gradle利用minifyEnabled進行Proguard混淆的配置,這麼做可以大大減小APP大小:

android {
    buildTypes {
        release {
            minifyEnabled true
        }
    }
}複製程式碼

在proguard中,是否保留符號表對APP的大小是有顯著的影響的,可酌情不保留,但是建議儘量保留用於除錯。

  • 使用shrinkResources配置去除無用資源

       使用AndroidStudio開發的小夥伴,可以在gradle利用shrinkResources去除無用資源,效果很棒。

android {
    buildTypes {
        release {
            shrinkResources true
        }
    }
}複製程式碼
  • 使用語言配置,去除多餘的語言支援

           使用AndroidStudio開發的小夥伴,可以在gradle中精簡語言配置,比如國內應用之配置支援中午,不需要其他國際化的幾十種語言支援。

android {
    defaultConfig {
        resConfigs"zh"
    }
}複製程式碼

套路三:謹慎處理專案中的so

  • 刪除armable-v7包下的so

       基本上armable的so也是相容armable-v7的,armable-v7a的庫會對圖形渲染方面有很大的改進,如果沒有這方面的要求,可以精簡。這裡不排除有極少數裝置會Crash,可能和不同的so有一定的關係,請大家務必測試周全後再發布。

  • 刪除x86包下的so

       x86包下的so在x86型號的手機是需要的,如果產品沒用這方面的要求也可以精簡。建議實際工作的配置是隻保留armable、armable-x86下的so檔案,算是一個折中的方案。

套路四:利用微信資源壓縮打包工具

       微信中的資源混淆工具主要為了混淆資源ID長度(例如將res/drawable/welcome.png混淆為r/s/a.png),同時利用7z深度壓縮,大大減少了安裝包體積,同時也增加了逼格,提升了反破解難度。
使用說明:微信資源壓縮打包工具使用介紹
技術原理介紹:安裝包立減1M–微信Android資源混淆打包工具
這裡寫圖片描述

2.程式碼瘦身套路

套路一:清理掉廢棄程式碼

       專案打包前仔細核對檢查原始碼,刪除無用的邏輯程式碼、過期的業務功能程式碼、多餘的註釋程式碼以及廢棄的test程式碼。

套路二:有條件的專案使用外掛化開發

       針對有條件的企業,將來可以將自己的應用分拆,某些功能可以以產檢的形式動態載入實現,用到時再進行雲端下載。動態載入外掛化技術無疑從根本上減少了apk的體積,但是引入這個技術是有代價的,增加了專案的維護難度和開發難度。所以該技術適用於大型的移動應用,當你的業務大到不分開模組難以高效率開發維護的時候,再考慮動態載入技術吧,否則如果小規模應用,還是老老實實考慮傳統的android官方推薦的開發方式。下面推薦幾個比較好的動態載入開源框架專案供大家學習

dynamic-load-apk
360DroidPlugin複製程式碼

套路三:使用HTML5進行介面開發

       專案中針對新聞、諮詢類需求的詳情頁,可以使用HTML5進行開發,這樣可以大大減少使用原生控制元件開發帶來的額外空間開銷。

套路四:提高程式碼質量

  • 使用Eclipse的小夥伴利用好FindBugs

       Findbugs是一個開源的eclipse 程式碼檢查工具;它可以簡單高效全面地幫助我們發現程式程式碼中存在的bug,bad smell,以及潛在隱患。針對各種問題,它並且提供了簡單的修改意見供我們重構時進行參考; 通過使用它,可以一定程度上降低我們code review的工作量,並且會提高review效率。 通過findbugs找到bug,再由我們自己重構程式碼,可以培養我們的編碼意識及水平,形成好的習慣提高開發編碼能力。

  • 使用AndroidStudio的小夥伴利用好Lint

       Lint通過對Android工程原始碼進行掃描和檢查,可發現潛在的問題,以便程式設計師及早修正這個問題,比如:

佈局效能(以前是 layoutopt工具,可以解決無用佈局、巢狀太多、佈局太多)
未使用到資源
不一致的陣列大小
國際化問題(硬編碼)
圖示的問題(重複的圖示,錯誤的大小)
可用性問題(如不指定的文字欄位的輸入型)
manifest檔案的錯誤複製程式碼

總結

至此,老司機談APK瘦身套路系列文章已經完結,相信已上車的小夥伴都能很好地掌握APK的瘦身方法,選擇適合自己專案的套路,相信你的APK定會瘦身成功。

參考連結:
www.cnblogs.com/soaringEver…

安卓開發高階技術交流QQ群:108721298 歡迎入群

微信公眾號:mobilesafehome

(本公眾號支援投票)

Android安全技術大本營

相關文章