開發時間久了, 幾個版本迭代以後, 工程中不免留下不少垃圾資源, 形成apk的包很大, 這裏介紹一個工具, 能夠自動掃描工程中, 沒有使用的資源, 而後自動刪除: 包括圖片, xml, 文本等. html
採用的方案: https://github.com/KeepSafe/android-resource-removerpython
這個開源的項目是基於lint掃描的結果, 執行python腳本自動刪除無用的文件.android
有一段時間沒更新了, 並且是基於以前eclipse的路徑結構, 不過即便是gradle工程, 仍然是可用的. 下面就是具體的方法, 本文是在mac os x上, 其餘的操做系統大同小異.git
1. 安裝github
首先是安裝: app
pip install android-resource-remover
2. 執行eclipse
a. eclipse工程工具
直接在項目根目錄下執行 測試
android-resource-remover
b. Android Studio工程gradle
注意, 按照github中的命令:
./gradlew clean build :lint && android-resource-remover --xml build/outputs/lint-results.xml
是不能工做的, 由於項目好久沒更新, 對gradle的目錄結構等支持很差, 通過本人摸索, 找到了可用的方法.
3. 編譯
首先clean工程:
在項目根目錄下執行
./gradlew clean
而後編譯:
./gradlew build
注意, 由於是命令行編譯, 有時會遇到系統jdk版本和Android Studio內置的jdk版本不同, 編譯失敗的問題, 請正確的切換jdk版本.
若是不會切換, 最簡單的方法就是將JAVA_HOME設置爲Android Studio內置的jdk路徑, mac上是
export JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"
Android Studio內置的jdk路徑能夠在Android Studio的項目設置的SDK Location中找到, 以下圖所示
設置jdk路徑就能夠正常編譯了, 只要在AndroidStudio裏能編過, 命令行也能編過. build過程最後會執行lint掃描, 這正是咱們想要的結果.
4. 基於lint結果, 刪除圖片
編譯以後lint掃描的結果在app/build/outputs/lint-results-debug.xml, 這是debug版的, 也有release版的.
這裏就有路徑問題了, 因此要按照下面的步驟操做:
a. cd 到AndroidManifest.xml同一路徑下, 即main文件夾
cd app/src/main
b. 執行腳本
android-resource-remover --xml ../../../app/build/outputs/lint-results-debug.xml
注意這裏使用了相對路徑../三次,返回到根目錄, 也可使用絕對路徑來指定lint結果文件.
腳本就會自動刪除沒有引用的資源了, 會輸出刪除的結果, 以下圖所示.
5. 修正
刪除後編譯一下, 會有一些誤刪, 可是本人測試發現, 誤判數量不多, 基本上是個位數的, 誤判的文件回覆便可, 就能夠編譯經過.
而後能夠多執行幾回, 有些文件一次掃不全, 要多掃幾回, 執行4-5次便可, 每次都從clean開始, 而後build, 再執行腳本.
對於大型的工程這個方法很是節省時間, 能夠在每次發版以前掃描一下, 給apk瘦身.