Android Studio最先接觸的版本印象里是1.X版本,印象最深的用的最多的應該是1.3和1.5兩個版本了,之前關於Android Studio的了解僅僅局限於在使用上,自從上年九月份離職到現在這家公司之后,很不幸再次開始了Eclipse的使用之旅,當然不幸中也是加深了我對Android Studio編譯APK過大的理解,這里來源於我確實對Android Studio放不下的情懷,從入職我就開始高調的提倡IDE的切換,乃至到寫這篇博客前夕,也算是落下帷幕了,這里我說下Eclipse項目遷移之后APK過大的一些心得。
Eclipse項目的遷移這里不再啰嗦了,可以自行網上搜索,我下邊附上截圖一張,以供參考。
這里補充一句,Import project(Eclipse ADT,Gradle,etc.),直接導入Eclipse項目就OK。
接下來咱們說重點問題,為什么同樣的代碼在Eclipse上打包的APK會遠遠小於Android Studio上的APK?
遇到問題我提倡一種精神,思路,遇到問題首先就是思路,解這個也是我運氣不佳,正好趕上感冒,所以腦子有點局限性了,我一直把關注點看在了Android Studio的編譯上,不管怎么說吧,最終卻是確定了問題卻是是Android Studio的編譯問題,為此我查詢了眾多資料,不過局限於公司網絡不讓翻牆問題。最終我只能憑借着大膽的猜測,Android Studio編譯采用的Gradle,對比Eclipse的區別最簡單,而且最有效的方法,解壓對比APK。
一下是Eclipse編譯的APK解壓截圖:
Android Studio截圖:
通過對比也許大家會發現其實總的來說,除了res文件之外別的文件大小幾乎是等同的,那么問題來了,res文件存放的全部是資源文件,那么咱們據需一探究竟,看是那塊資源引起的如此大的區別。
追根溯源,看如下apk資源圖片對比圖,相同的資源在不同的apk中的大小:
很明顯Android Sttudio進行打包之后,圖片壓縮比對比Eclipse要小的多。這也就是最終引起APK過大的最終原因了,也就應了我上述的猜想,Android Studio采用gradle編譯的apk的編譯問題,這個問題就是Gradle進行圖片壓縮的時候,壓縮方式不同。
那么問題來了,如何解決這個問題那?
既然Gradle不能有效的壓縮圖片那么,那么是不是咱們可以自己手動壓縮,當然答案是肯定的。
使用tinypng優化大部分圖片資源:
tinypng是一個支持壓縮png和jpg圖片格式的網站,通過其獨特的算法(通過一種叫“量化”的技術,把原本png文件的24位真彩色壓縮為8位的索引演示,是一種矢量壓縮方法,把顏色值用數值123等代替。)可以實現在無損壓縮的情況下圖片文件大小縮小到原來的30%-50%。
這里補充下tinypng支持png,jpg,.9圖等壓縮。
tingyng的去頂就是在壓縮某些過度效果(帶alpha)的圖片時,圖片會失真,這種圖片可以將png圖片轉換成為下面的webp格式,可以在保證圖片質量的前提下大幅度的縮小圖片的大小
tinypng提供了開發接口供開發者開發屬於自己壓縮工具,不過這個東西收費,好在這東西對於普通用戶來說tinypng為每個用戶提供每個月圖片免費壓縮數量,這個對於我們而言已經足夠了
使用WebP圖片格式:
WebP是谷歌研發出來的一種圖片的數據格式,他是支持有所壓縮和無損壓縮的圖片文件格式,派生子圖片編碼格式VP8.根據google的測試,無所壓縮后的WebP比PNG文件少了45%的文件大小,及時這個PNG文件經過其他壓縮之后,webP依然還是可以減少28%的文件大小。木錢很多公司已經開始講WebP應用到Android APP當做去,比如FaceBook,tencent,淘寶。WEbP相比PNG面向問題就是加載稍慢,不過現在只能硬件配置越來越高,這些差距也就微乎其微了。
假如你在APP中使用了WebP,出了在Android 4.0以上提供的原生支持職位,其他版本的可以使用官方提供的解析庫webp-android-backport編譯.SO使用。
同城UI提供的圖片都是png或者是jpg格式,我們可以通過智圖或者isparta將其他格式的圖片轉換成webP格式的isparta可實現批量轉換,牆裂推薦!
使用tintcolor實現按鈕的翻轉效果:
通常按鈕的正反旋轉圖片我們都是通過一張按鈕正常的圖片和一張按鈕翻轉圖片,然后通過selector實現,兩張圖片除了透明度之前其他的都是重復的,在Android 5.0之后的版本可以通過tintcolor實現只提供一張圖片按鈕,在程序中實現反轉效果,前提圖片內容要是一樣的,只是正反按鈕的顏色不一樣。