一、為什么用webp格式
webp格式可以將圖片盡量小得壓縮,這個在移動應(yīng)用中使用很廣,且技術(shù)較成熟。
創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、網(wǎng)站營銷推廣,申請域名,網(wǎng)頁空間,網(wǎng)站托管維護有關(guān)企業(yè)網(wǎng)站制作方案、改版、費用等問題,請聯(lián)系創(chuàng)新互聯(lián)。
二、編譯動態(tài)庫包
編譯的動態(tài)庫包的源碼參照GitHub地址請?zhí)砑渔溄用枋?/p>
我的環(huán)境
Android Studio3.0.1
gradle 3.3
jdk 1.8.0_101
ndk-build android-ndk-r10e-windows-x86_64
導入Android Studio,
注意Application.mk中的配置,APP_ABI配置是指需要生成哪些環(huán)境下的so包,我的環(huán)境起初添加了armeabi好像是有問題的,armeabi現(xiàn)在用的越來越少,我給去掉了。
Terminal中cd到j(luò)ni路徑執(zhí)行命令如下:
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk
運行完成后會在jni目錄下自動生成libs文件夾,生成動態(tài)庫包如圖:
此時動態(tài)庫包就打好了,然后就是如何調(diào)用so包了,
在app目錄下加入so包,
在我們自己需要引用的工程中build.gradle中加入配置 android.sourceSets
sourceSets {
main {
jniLibs.srcDirs = ['libs']//設(shè)置目標的so存放路徑
}
}
然后加入WebPDecoder.java,這里注意這個文件的路徑一定要按照編譯時的路徑me.everything.webp.WebPDecoder。
當然如果需要也可以更改,不過要連編譯時webp.c中的路徑一并更改
三、使用動態(tài)庫包展示webp
最后就是調(diào)用了,bytes是webp格式的bytes數(shù)組形式
ImageView iv = findViewById( R.id.imageView );
Bitmap webpBitmap = WebPDecoder.getInstance().decodeWebP(bytes);
iv.setImageBitmap(webpBitmap);