支持Android4.0以下webp的使用
from:http://blog.csdn.net/jiwangkailai02/article/details/17015451
最近項(xiàng)目中需要使用到webp,主要目的是減少網(wǎng)絡(luò)流量(同一張圖片,webp格式能比jpg格式小約30%)。但是Android在4.0以上BitmapFactory才支持webp,今天的操作就是要使Android4.0以下的版本也能進(jìn)行webp的解壓縮。
首先,需要搭建NDK開發(fā)的環(huán)境
1.下載并安裝Cygwin
Cygwin下載地址:http://www.cygwin.com/
按照向?qū)б宦废蛳?#xff0c;(使用默認(rèn)的鏡像路徑http://www.mirrors.163.com/,這個貌似比較快)。
到達(dá)這一步:
選擇Devel,點(diǎn)開。選擇我們必須安裝的5個組件:binutils ,gcc(包含core和g++) ,gcc-mingw(包含core和g++) ,gdb,make。(有的時(shí)候你需要更多的組件,根據(jù)自己需要再安裝)
選擇完后,點(diǎn)擊下一步,直到安裝完成。
運(yùn)行cygwin,輸入make -v 和 gcc -v 如果能顯示版本,則表示安裝成功。
2.下載并配置NDK
NDK下載地址:http://developer.android.com/tools/sdk/ndk/index.html
NDK安裝很簡單,下載完成后把文件解壓到指定的位置即可。
NDK環(huán)境配置:
修改Cygwin目錄/home/<username> 下的.bash_profile文件,在文件末尾加入如下代碼:
ANDROID_NDK_ROOT=/cygdrive/解壓后NDK文件的路徑 /*(例如:/cygdrive/d/android-ndk-r9b)*/
export ANDROID_NDK_ROOT
至此,準(zhǔn)備工作已經(jīng)完畢。
其次,我們需要下載并編輯webp的源文件
我們使用最新的0.3.1版本的webp源文件,下載地址為:http://code.google.com/p/webp/downloads/detail?name=libwebp-0.3.1.tar.gz&can=2&q=
下載完成后,解壓縮,提出Android.mk文件、src文件夾和swig文件下的libwebp.jar文件和libwebp_java_wrap.c文件。并將libwebp_java_wrap.c文件移動到src文件夾下。
在工程目錄下新建名字為jni的文件夾。然后將Android.mk文件、src文件夾移動到j(luò)ni文件夾下。最后,將libwebp.jar引入到工程中。
編輯Android.mk文件夾,在include $(CLEAR_VARS)
LOCAL_SRC_FILES := \中添加:src/libwebp_java_wrap.c \
并將include $(BUILD_STATIC_LIBRARY)該為include $(BUILD_SHARED_LIBRARY)
如下:
(BUILD_STATIC_LIBRARY和BUILD-SHARED_LIBRARY的區(qū)別參考:http://stackoverflow.com/questions/2649334/difference-between-static-and-shared-libraries)
然后在jni文件夾下創(chuàng)建Application.mk文件,編輯內(nèi)容如下:
# The ARMv7 is significanly faster due to the use of the hardware FPU
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-8
其中APP_PLATFORM設(shè)定為支持的SDK最低版本。
保存后,我們啟動Cygwin,然后通過cd指令進(jìn)入到我們工程的文件夾下,執(zhí)行指令:$NDK/ndk-build。
等到編譯結(jié)束:
至此so庫已經(jīng)生成(查看libs文件夾就會發(fā)現(xiàn)對應(yīng)的.so文件。同時(shí)你會發(fā)現(xiàn)工程目錄下多了一個obj文件夾,而且還不小。放心,它只是生成so文件的中間文件,不會打包到apk中)。
接下來的任務(wù)是使用JNI調(diào)用so庫進(jìn)行應(yīng)用層的開發(fā)了。
應(yīng)用層的開發(fā)工程一般如下:
1. 加載so庫。
[java]?view plaincopy
native方法是:
[cpp]?view plaincopy
應(yīng)用層中需用生命的方法為:
[java]?view plaincopy
3.使用應(yīng)用層聲明的方法。
下面我們按照上述方法來在應(yīng)用層使用我們剛生成的so庫
記得有一個libwebp.jar文件不,這個jar已經(jīng)把應(yīng)用層聲明的native方法搞好了,而且?guī)臀覀兎庋b了一層,我們只用調(diào)用其方法就ok了,但是我們還是要加載so庫,因?yàn)檫@個它沒有幫我們實(shí)現(xiàn)。
我們寫兩個方法:
[java]?view plaincopy
下面有一個demo,大家可以參考下:
Webp解壓縮Demo
參考資料:
android官方對NDK開發(fā)的介紹:http://developer.android.com/tools/sdk/ndk/index.html
stackoverflow上一個人的經(jīng)驗(yàn)介紹:http://stackoverflow.com/questions/7032695/webp-for-android
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的支持Android4.0以下webp的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios图像处理第2部分:核心图形,核心图
- 下一篇: 图像处理资源