日韩性视频-久久久蜜桃-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)站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 五月天婷婷影院 | 国产21页 | 欧美日韩激情在线观看 | 96国产在线 | 放荡的美妇在线播放 | 调教在线观看 | 国产av一区二区三区传媒 | 亚洲爆乳无码一区二区三区 | 亚洲精品久久久久久无码色欲四季 | 午夜激情视频在线观看 | 国产亚洲精品熟女国产成人 | 色婷婷五| 天天干免费视频 | www.国产精品.com | 日韩精品一线二线三线 | 好吊视频一区二区三区四区 | 亚洲精品女人 | 在线观看免费中文字幕 | 国产99re| 国产在线一区二区 | 国产 日韩 一区 | 成人网在线播放 | 精品国产一区在线 | 伊人免费视频 | 亚洲精品在线一区二区 | 青青草这里只有精品 | 极品国产91在线网站 | 亚洲国产欧美视频 | 午夜写真片福利电影网 | 国产传媒在线播放 | 久久成人动漫 | 亚洲精品日韩综合观看成人91 | 久久婷婷综合色 | 黑人一区二区三区四区五区 | 玩偶姐姐在线看 | 香蕉网在线播放 | 免费啪啪网 | jizz毛片 | 99精品视频在线观看免费 | 国产美女特级嫩嫩嫩bbb | 丝袜+亚洲+另类+欧美+变态 | 神秘马戏团在线观看免费高清中文 | 偷拍亚洲色图 | 51ⅴ精品国产91久久久久久 | 天堂色网 | 中文字幕久久久久 | 7777久久亚洲中文字幕 | 男女免费看 | 亚洲一区二区三区免费 | 欧美性xxxxxxxxx | 射网站| 久久精品视频一区二区三区 | 88久久精品无码一区二区毛片 | 久久免费片 | 少妇熟女一区二区三区 | 丰满秘书被猛烈进入高清播放在 | 国产精品久久一区 | av色欲无码人妻中文字幕 | 朴银狐电影中文在线看 | 国产精品人人妻人人爽人人牛 | 午夜精品久久99蜜桃的功能介绍 | 国产乱码一区二区 | 国产在线一区二 | 手机看片日韩在线 | 性欧美videos另类艳妇3d | 五月婷婷伊人网 | 久久久激情视频 | 91亚洲精品久久久蜜桃 | 福利在线网站 | 依人在线视频 | 美女精品一区二区 | 农村少妇久久久久久久 | 白嫩日本少妇做爰 | www日本免费| 国产高中女学生第一次 | 国产精品视频你懂的 | www毛片com| 精品丰满人妻无套内射 | 成人性生交大片免费看 | 另类亚洲激情 | 69re视频 | 国产九九久久 | 久久久久久久久影院 | 日本青青草视频 | 性做爰视频免费播放大全 | 欧美极品在线视频 | 丝袜脚交免费网站xx | 亚洲综合久久婷婷 | 国产欧美一区二区三区鸳鸯浴 | 亚洲国产中文字幕 | 亚洲美女屁股眼交3 | 久久精品欧美一区二区 | 绿帽人妻精品一区二区 | 朝鲜黄色片 | 精品麻豆视频 | 国产欧美又粗又猛又爽 | av在线视屏 | 国产精品无码AV无码国产 | 国产精品日韩电影 |