如何讓你的 Android 顯示gif格式的圖片
這里,首先要說明的是,希望那些已經實現了gif格式圖片顯示的朋友不要噴我,我知道你們是怎么做的,無非兩種:一種是用原本就已經存在的gif解 碼jar包,另外一種是使用google提供的開源的gif解碼包。但是這兩種方式都是在應用程序中對gif格式圖片進行解碼的,java解碼效率有多 高,相信大家都很了解。
這里,我要介紹一種通過修改android源代碼來實現gif格式圖片顯示的方法。
相信看過android源代碼的朋友都知道,android使用了一個十分強大的skia圖形引擎,它就潛伏在android源代碼的 external目錄下。這個引擎的誕生和被google收購,具有各種傳奇色彩和神秘面紗,這里就不詳細談了。不過百度一下,你就知道這個圖形引擎到底 是有多么的強大。
這么強大的圖形引擎不支持gif解碼?相信說出來都不會有人相信。
沒錯,它是支持的,很明顯可以看到,在android源代碼的external目錄下有一個名為giflib的文件夾,它就是gif解碼器,通過插件的方式加載到skia里面,但是為什么應用開發的時候不能顯示gif而只能顯示一幀圖片呢?
原因是這樣的,android默認開發都是用模擬器來做的,而我上篇文章里面也有說道,模擬器的內存資源和cpu資源都是相當有限的,僅為256M 內存,對于各種資源要求的應用和功能來說,這樣的資源顯然遠遠不夠,所以,google為了保證它的模擬器不會“隨時死機”,對這部分的內容,悄悄的做了 一點點的修改。而好巧不巧的是,這個意圖居然被鄙人發現了,更加好巧不巧的是,這個修改是在是太有吸引力了,太精妙了,引發了我強大的好奇心,于是,我一 頭鉆了進去。實在是有點湊巧,這個修改還被我發現了...
接著,我修改了webkit部分源代碼(webkit關于圖形解析的部分調用了skia的實現),驚奇的發現,百度一下gif圖片,android 的瀏覽器居然可以播放gif了,不過很顯然,這種超負荷的工作模擬器顯然是無法正常完成的,我使用的是我上篇文章中提到的android-x86系統做的 實驗。
這樣一來,應用程序開發者就可以順利成章的使用webview類來完成gif格式圖片的顯示了。當然,在這之前,還需要做以下工作:
1、下載一份android-x86或者android的源代碼(推薦使用android-x86,這真的是個很好用也很有意思的東西,當然,如果你堅持要用模擬器,我也不攔你,甜果子不吃非挑苦的吃那是你的權利)
2、修改源代碼并編譯
如果你看了我上一篇文章并已經按照我說的步驟做了,那么以上兩步你只需要做第二步,并且以下步驟你也不用做了,直接將編譯生成的ISO鏡像文件通過 虛擬機運行起來,百度一下gif你就會看到奇跡了。如果你很倔強,一定要使用模擬器,那么,我也好心地給你提供接下來的解決方案:
3、編譯生成system.img、userdata.img和ramdisk.img
4、將這三個img文件替換掉你的sdk工具里面的那三個img文件
接著運行模擬器,百度一下gif,你也會發現奇跡,不過這個“奇跡”相對與android-x86來說,實在是有夠慢的“奇跡”。
需要知道如何修改源碼的朋友可以給我留言或者給我發郵件louiswangbing@gmail.com
原文出處:http://blog.csdn.net/louiswangbing/article/details/6606933