1. 程式人生 > >多方法批量刪除Android中無用的資源(更新Android Studio2.1工具)

多方法批量刪除Android中無用的資源(更新Android Studio2.1工具)

一個app開發久了,專案中難免會有越來越多沒有被呼叫到卻沒有被及時刪除的資原始檔, 尤其是體積較大的圖片檔案,於是我們會發現我們的app包越來越大,越來越臃腫。於是,定期的檢測我們工程中哪些資源已經被廢棄,是十分必要的。要做這麼一個工作,分為兩步,一步是查詢到這些無用的資源,另一步是批量刪掉他們!

網上類似的工具有一些,其中“列出”這一步驟我整理了兩種方案

1、使用 AndroidUnusedResources.jar(不推薦)
這是一個第三方的jar包,直接下載該jar包到自己的工程根目錄,使用命令
java -jar AndroidUnusedResources1.6.2.jar>>d:\unused.txt
即可將不用的資源匯出到該txt檔案,達到目的。我個人不推薦這個方法,因為第二種更簡單~第一種方法詳情請看以下連結:

http://blog.csdn.net/u012808234/article/details/47440629

2、直接使用Adrdoi Studio的lint功能(推薦)
看到這裡,你肯驚呼,哇,原來studio自己就有這個功能啊!?是的,具體操作如下:
Analyze-》Run Inspaction by Name
點開以後,輸入 Unused resources開啟
這裡寫圖片描述
執行完畢以後,你會得到一個類似圖中的無用資源清單
這裡寫圖片描述
可以看到有drawable,有dimen,有anim等各種型別的resources。
另外,你也可以將此結果匯出為檔案,便於對照,匯出的按鈕在最左側的選單欄。

——– 2016.4.4更新


接下來要刪除了,在最新的版本(Studio2.1)中,lint已經可以自行刪除無用資源,這樣的話,我們的python指令碼也不需要寫了,具體操作如下:
這裡寫圖片描述
注意到更之前的版本比,右側的操作多一個了resolution,我們選擇Remove All Unused Resources。片刻後彈出一個確認對話方塊,確認之
這裡寫圖片描述
搞定了!

——–2016.4.4更新結束

——–歷史版本——–

接下來要刪除了,可惜lint並沒有提供直接刪除的操作,我們要自己刪除,你可以自己刪除,當然也可以寫個指令碼,我來分享一下我自己的方案。

以刪除圖片資源為例,我們的思路就是找到檔名,找到對應目錄,刪掉檔案:
1、首先,把圖片相關的資料拷貝出來,放在一個文字檔案中
這裡寫圖片描述


整理一下,用行編輯和替換,得到一個純檔名的文件:
這裡寫圖片描述

2、寫一個簡單的python檔案,功能是讀文件,把文件裡面每一行資料拼成一個檔案路徑,然後呼叫刪除檔案的命令rm,刪掉。
這裡寫圖片描述
程式碼還有很多要優化的地方,文字就不貼了,大家看看思路即可
(有朋友反應圖太小了看不清楚,我程式碼也貼一下吧)

import os  

if __name__ == '__main__':
    #工程資源的路徑
    main = "E:/git-work/android/app/src/main/res/"
    #刪除的圖片可能存在的路徑
    d = "drawable/"
    m = "drawable-mdpi/"
    lh = "drawable-lhdpi/"
    h = "drawable-hdpi/"
    xh = "drawable-xhdpi/"
    xxh = "drawable-xxhdpi/"
    #開啟我們匯出的無用資源列表
    f = open("C:/Users/Administrator/Desktop/res.txt", 'r')  
    line = f.readline()
    #以行為單位迴圈
    while line:  
        line = f.readline()
        if (line != ""):
            #注意line讀出來以後 行末有空格,替換一下,加個.*的字尾可以刪除xml、.9等其它格式的圖片
            line = line.replace('\n','.*')
            print ("==="+line)
            #呼叫系統方法刪除 簡單粗暴
            os.system("rm "+main+d+line)
            os.system("rm "+main+m+line)
            os.system("rm "+main+lh+line)
            os.system("rm "+main+h+line)
            os.system("rm "+main+xh+line)
            os.system("rm "+main+xxh+line)
    f.close()

ok,直接執行指令碼,那些無用的圖片就被統統刪掉了~

——–歷史版本結束——–

如果resourcesNotFound的錯誤,建議自行跑跑monkey,送命令
adb shell monkey -p com.xxx.xxx -s 500 100000