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