日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

支持Android4.0以下webp的使用

發(fā)布時間:2025/7/25 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 支持Android4.0以下webp的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

from:http://blog.csdn.net/jiwangkailai02/article/details/17015451


最近項目中需要使用到webp,主要目的是減少網(wǎng)絡流量(同一張圖片,webp格式能比jpg格式小約30%)。但是Android在4.0以上BitmapFactory才支持webp,今天的操作就是要使Android4.0以下的版本也能進行webp的解壓縮。

首先,需要搭建NDK開發(fā)的環(huán)境

1.下載并安裝Cygwin

Cygwin下載地址:http://www.cygwin.com/

按照向導一路向下,(使用默認的鏡像路徑http://www.mirrors.163.com/,這個貌似比較快)。

到達這一步:

選擇Devel,點開。選擇我們必須安裝的5個組件:binutils ,gcc(包含core和g++) ,gcc-mingw(包含core和g++) ,gdb,make。(有的時候你需要更多的組件,根據(jù)自己需要再安裝)

選擇完后,點擊下一步,直到安裝完成。

運行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

至此,準備工作已經(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文件夾移動到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的區(qū)別參考:http://stackoverflow.com/questions/2649334/difference-between-static-and-shared-libraries)

然后在jni文件夾下創(chuàng)建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指令進入到我們工程的文件夾下,執(zhí)行指令:$NDK/ndk-build。

等到編譯結束:

至此so庫已經(jīng)生成(查看libs文件夾就會發(fā)現(xiàn)對應的.so文件。同時你會發(fā)現(xiàn)工程目錄下多了一個obj文件夾,而且還不小。放心,它只是生成so文件的中間文件,不會打包到apk中)。

接下來的任務是使用JNI調用so庫進行應用層的開發(fā)了。

應用層的開發(fā)工程一般如下:

1. 加載so庫。

[java]?view plaincopy
  • static?{??
  • ????System.loadLibrary("webp");//loadLibrary和Android.mk中LOCAL_MODULE:=?**的定義相關,我們在Android.mk中定義為webp,這里就寫webp。??
  • }??
  • 2.聲明與Native方法相對應的方法。

    native方法是:

    [cpp]?view plaincopy
  • SWIGEXPORT?jint?JNICALL?Java_com_google_webp_libwebpJNI_WebPGetDecoderVersion(JNIEnv?*jenv,??
  • ?????jclass?jcls)?{??
  • ??jint?jresult?=?0?;??
  • ??int?result;??
  • ??
  • ??(void)jenv;??
  • ??(void)jcls;??
  • ??result?=?(int)WebPGetDecoderVersion();??
  • ??jresult?=?(jint)result;??
  • ??return?jresult;??
  • }??
  • native方法命名規(guī)則為:Java_包名_類名_應用層方法名。其中包名中的點被下劃線替代。
    應用層中需用生命的方法為:

    [java]?view plaincopy
  • public?static?final?native?int?WebPGetDecoderVersion();??
  • 應用層只用聲明,不用定義,但要加上native關鍵字。

    3.使用應用層聲明的方法。

    下面我們按照上述方法來在應用層使用我們剛生成的so庫

    記得有一個libwebp.jar文件不,這個jar已經(jīng)把應用層聲明的native方法搞好了,而且?guī)臀覀兎庋b了一層,我們只用調用其方法就ok了,但是我們還是要加載so庫,因為這個它沒有幫我們實現(xiàn)。

    我們寫兩個方法:

    [java]?view plaincopy
  • static?{??
  • ????System.loadLibrary("webp");??
  • }??
  • ??
  • private?Bitmap?webpToBitmap(byte[]?encoded)?{??
  • ??
  • ????int[]?width?=?new?int[]?{?0?};??
  • ????int[]?height?=?new?int[]?{?0?};??
  • ????byte[]?decoded?=?libwebp.WebPDecodeARGB(encoded,?encoded.length,?width,??
  • ????????????height);??
  • ??
  • ????int[]?pixels?=?new?int[decoded.length?/?4];??
  • ????ByteBuffer.wrap(decoded).asIntBuffer().get(pixels);??
  • ??
  • ????return?Bitmap.createBitmap(pixels,?width[0],?height[0],??
  • ????????????Bitmap.Config.ARGB_8888);??
  • ??
  • }??
  • ??
  • public?static?boolean?isWebp(byte[]?data)?{??
  • ????return?data?!=?null?&&?data.length?>?12?&&?data[0]?==?'R'??
  • ????????????&&?data[1]?==?'I'?&&?data[2]?==?'F'?&&?data[3]?==?'F'??
  • ????????????&&?data[8]?==?'W'?&&?data[9]?==?'E'?&&?data[10]?==?'B'??
  • ????????????&&?data[11]?==?'P';??
  • }??
  • 基于這兩個方法,我們可以對webp圖片進行解壓縮。

    下面有一個demo,大家可以參考下:

    Webp解壓縮Demo

    參考資料:

    android官方對NDK開發(fā)的介紹:http://developer.android.com/tools/sdk/ndk/index.html

    stackoverflow上一個人的經(jīng)驗介紹:http://stackoverflow.com/questions/7032695/webp-for-android

    版權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉載。


    總結

    以上是生活随笔為你收集整理的支持Android4.0以下webp的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 三级网站在线看 | 健身教练巨大粗爽gay视频 | 少妇精品视频一区二区 | 国产 欧美 日韩 在线 | 国产老女人乱淫免费 | 国产亚洲精品久久久久久久 | 五十路毛片 | 午夜av剧场 | 少妇无码av无码专区在线观看 | 永久免费的网站入口 | av在线男人天堂 | 国产成人高清 | 欧美做爰性生交视频 | 丝袜美腿亚洲综合 | av影片在线播放 | 国产欧美一区二区在线 | 91精品国产闺蜜国产在线闺蜜 | 91精品免费在线观看 | 簧片av| 国产一区二区在线观看视频 | 欧美精品在线视频观看 | 亚洲精品69 | 在线日韩视频 | 国产一级视频 | 色婷婷综合在线 | 伊人网站在线观看 | 日韩三级视频 | 欧美三级在线视频 | 撸撸在线视频 | 天天综合天天做 | 国产日韩一区二区三区 | 国产一区视频观看 | 日韩中文字幕免费在线观看 | 激情综合网五月天 | 老太太av | 亚洲情se | 欧美日免费| 欧美日韩123区 | 国产精品夫妻自拍 | 欧美精品免费在线 | 日韩有码中文字幕在线观看 | 日本69少妇 | 国产51精品 | 91久久综合亚洲鲁鲁五月天 | 免费网站观看www在线观 | 在线观看日本中文字幕 | 99久久婷婷国产综合精品青牛牛 | 成人av一区二区三区 | 日韩人妻精品中文字幕 | 欧美日韩天堂 | 国产探花在线精品一区二区 | 亚洲精久| 女人扒开双腿让男人捅 | 国产日本欧美在线 | 午夜影院美女 | 日韩成年视频 | 91蜜臀精品国产自偷在线 | 国产免费一区二区三区三州老师 | 山村淫强伦寡妇 | 日韩一区二区三区在线看 | 久久这里只有精品23 | 天天插天天爽 | 欧洲亚洲一区二区 | 免费看的黄色小视频 | 欧美一区欧美二区 | 高h全肉污文play带道具 | 国产又色又爽又黄的 | 精品国产黄色 | 中文字幕在线视频一区二区 | 青青草久久伊人 | 国产三级自拍视频 | 葵司免费一区二区三区四区五区 | 中文有码在线播放 | 亚洲特黄一级片 | 女性裸体瑜伽无遮挡 | 亚洲不卡一区二区三区 | 国产成人精品一区二区在线小狼 | 欧美性猛交一区二区三区精品 | 国产精品影音先锋 | 中文字幕成人 | 热热色原网址 | 国产污视频在线观看 | 成人网在线视频 | 波多野结衣在线观看一区 | 色婷婷av一区二区 | 老司机午夜精品视频 | 亚洲影音 | 青青视频免费观看 | 日韩av一卡| 欧美黑人一级爽快片淫片高清 | 青青视频免费看 | 久久久男女 | 色综合网站 | 精品熟妇视频一区二区三区 | 国产精品久久久久久av | 18黄暴禁片在线观看 | 日韩女优网站 | 色婷婷一区二区三区四区 | 免费av软件 |