iOS ipa包瘦身---刪除無用圖片資源

來源:互聯網
上載者:User

標籤:span   項目   car   開啟   java   name   efi   命令   -o   

     隨著用戶端業務的增多和業務的更新,App包大小越來越大,最佳化包大小的事情迫在眉睫,用戶端需要最佳化的地方也有很多,本期主要講如何尋找無用圖片並且刪除無用圖片的方法。     方案1:(暴力方法)很簡單寫一個指令碼把圖片的名稱在整個工程下尋找即可,查不到就說明這張圖片是無用的。(對於小的工程這樣方案是可以的,但是對於工程大的項目尋找太慢了)。     方案2:把所有的指派陳述式提取出來放到一個檔案中,再把工程下面的圖片名稱擷取出來在這個檔案中尋找,若尋找不到則說明此圖片是無用資源。由於工程中的圖片全部放在了Images.xcassets檔案夾下。下面的指令碼是尋找Images.xcassets目錄下面的無用圖片。若圖片檔案不是放在Images.xcassets檔案夾下,稍微修改指令碼就可以用,下面的指令碼刪除無用圖片的思路同樣適用於Android工程。
#!/bin/shprogramFilePath=$(cd "$(dirname "$0")"; pwd)unusedCount=0maybeUnusedCount=0if [[ -z $programFilePath ]]; thenread -p "請輸入工程的路徑" programFilePathficheck_files=`find $programFilePath -name ‘*.xib‘ -o -name ‘*.storyboard‘ -o -name ‘*.[mh]‘  -o -name ‘*.pch‘ -o -name ‘*.java‘ -o -name ‘*.xml‘ -o -name ‘*.js‘ -o -name ‘*.html‘`for file  in `echo $check_files | sed ‘s/\n/ /g‘`    do#iOS圖片引用規則 :擷取@符號的語句        grep -i "@\"" -A 0  "$file" | grep -v  -e  "--" >> maybeImageSentence.txt    doneimageTextPath="$programFilePath/maybeImageSentence.txt"maybeUnusedImageFilePath="$programFilePath/maybeUnusedImage.txt"if [ -f "$maybeUnusedImageFilePath" ]; then    rm -f "$maybeUnusedImageFilePath"fiunusedImageFilePath="$programFilePath/unusedImage.txt"if [ -f "$unusedImageFilePath" ]; then    rm -f "$unusedImageFilePath"fifor png in `find $programFilePath -name ‘*.png‘`do    # 圖片名稱    match_name=`basename $png`    suffix1="@2x.png"    suffix2=".9.png"    suffix3=".png"    suffix4="@3x.png"    if [[ ${match_name/${suffix1}//} != $match_name ]]; then      match_name=${match_name%$suffix1}    elif [[ ${match_name/${suffix4}//} != $match_name ]]; then           match_name=${match_name%$suffix4}       elif [[ ${match_name/${suffix2}//} != $match_name ]]; then           match_name=${match_name%$suffix2}    else        match_name=${match_name%$suffix3}    fi    dir_name=`dirname $png`    if [[ $dir_name =~ .bundle$ ]] || [[ $dir_name =~ .appiconset$ ]] || [[ $dir_name =~ .launchimage$ ]]; then      continue    fi    # 在imageset裡面找    result=$(echo $dir_name | grep "imageset")    if [[ "$result" == "" ]];  then        continue    fi    referenced=false    if grep -q "$match_name" "$imageTextPath"; then        referenced=true    fi    contaT=$(echo $match_name | grep "[0-9]")    if [[ "$contaT" != "" ]];  then        maybeUnusedCount=`expr $maybeUnusedCount + 1`        echo "$png"  >> maybeUnusedImage.txt        continue    fi      if ! $referenced ; then          unusedCount=`expr $unusedCount + 1`        echo "$png"  >> unusedImage.txt        # 開啟下面的語句直接刪除圖片目錄 例如icon_arrow_bluesmall.imageset#          rm -rf $dir_name      fidonerm maybeImageSentence.txtecho "Total $unusedCount unusedImage files ->imagePath store unusedImage.txt"echo "Total $maybeUnusedCount maybeUnusedImage files ->imagePath store maybeUnusedImage.txt"

使用方法:首先把上面的代碼複製到一個檔案中命名為 unused-image.sh,把這個檔案放在目標工程下面執行   sh unused-image.sh 命令即可。會產生兩個檔案 unusedImage.txt和 maybeUnusedImage.txt。

方案2的缺點就是無法判斷圖片名稱帶有數位無法確定是否是無用資源片名稱為[email protected],此類命名的圖片輸出到maybeUnusedImage.txt這個檔案中,需要手動的排查刪除。

 

 原創文章,歡迎轉載,轉載請標註,謝謝大家!!!!!!!

 原創文章,歡迎轉載,轉載請標註,謝謝大家!!!!!!!

 原創文章,歡迎轉載,轉載請標註,謝謝大家!!!!!!!

================================================================

若有疑問請加本人QQ:610774281 :stephenli225。 一起探討一起進步。。。。

iOS ipa包瘦身---刪除無用圖片資源

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.