【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )
文章目錄
- 一、 Android Studio 中導入 libwebp.so 庫
- 二、 Android Studio 中測試 libwebp.so 庫
- 三、參考資料
一、 Android Studio 中導入 libwebp.so 庫
已經做好了兼容 4.0 以下系統的的 Android 工程源碼 , 在下面博客資源中可以下載 ;
上一篇博客 【Android 安裝包優化】WebP 應用 ( libwebp 源碼下載 | Android.mk 和 Application.mk 構建腳本修改 | libwebp 函數庫編譯 ) 最后編譯好的動態庫在 libs 目錄下 ;
每個 CPU 架構目錄下都有如下幾個文件 :
導入三種 CPU 架構的動態庫到 Android Studio 中 , 在 Android Studio 中的 app/src/main/ 下創建 jniLibs 目錄 , 創建三個對應架構的目錄 , 拷貝對應的 libwebp.so 動態庫到對應目錄中 ;
Google 為該 libwebp.so 提供了 Java 調用接口 , 將 libwebp-0.6.1\swig\libwebp.jar 拷貝到 app/libs 目錄中 ;
在 Android Studio 中 , 右鍵點擊 libs 下的 libwebp.jar , 在彈出的菜單中 , 選擇 " Add As Library … " ,
選擇要添加 Library 的 Module ,
在對應 Module 下的 build.gradle 構建腳本中 , 就會添加對應的 jar 依賴 ;
在 build.gradle 構建腳本中 , 設置 APK 打包指令集 , 這里全設置 ;
在使用 libwebp.so 的類中 , 需要手動加載動態庫 ;
class MainActivity : AppCompatActivity() {companion object{val TAG = "MainActivity"init {System.loadLibrary("webp")}} }二、 Android Studio 中測試 libwebp.so 庫
調用一下 libwebp 庫中的 WebPGetDecoderVersion() 函數 , 查看是否能使用 ;
package kim.hsl.webpimport android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.google.webp.libwebp import java.io.FileOutputStream import java.nio.ByteBufferclass MainActivity : AppCompatActivity() {companion object{val TAG = "MainActivity"init {System.loadLibrary("webp")}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)Log.e(TAG, "libwebp 函數庫版本 : ${libwebp.WebPGetDecoderVersion()}")// 測試 WebP 解碼速度decodeWebP()// 測試 WebP 編碼速度encodeWebP()}fun encodeWebP(){// 讀取一張本地圖片var bitmap = BitmapFactory.decodeResource(resources, R.mipmap.icon_png)var pngStart = System.currentTimeMillis()var fos = FileOutputStream("${cacheDir}/icon_png.png")bitmap.compress(Bitmap.CompressFormat.PNG, 75, fos)fos.close()Log.e(TAG, "編碼 png 格式圖片時間 : ${System.currentTimeMillis() - pngStart} ms , " +"輸出文件 : ${cacheDir}/icon_png.png")var webPStart = System.currentTimeMillis()fos = FileOutputStream("${cacheDir}/icon_webp.webp")bitmap.compress(Bitmap.CompressFormat.WEBP, 75, fos)fos.close()Log.e(TAG, "編碼 WebP 格式圖片時間 : ${System.currentTimeMillis() - webPStart} ms , " +"輸出文件 : ${cacheDir}/icon_webp.webp")}fun decodeWebP(){var pngStart = System.currentTimeMillis()BitmapFactory.decodeResource(resources, R.mipmap.icon_png)Log.e(TAG, "解碼 png 格式圖片時間 : ${System.currentTimeMillis() - pngStart} ")var webPStart = System.currentTimeMillis()BitmapFactory.decodeResource(resources, R.mipmap.icon_webp)Log.e(TAG, "解碼 WebP 格式圖片時間 : ${System.currentTimeMillis() - webPStart} ")} }打印結果 :
2021-04-25 14:11:16.249 1545-1646/kim.hsl.webp E/libc: Access denied finding property "vendor.debug.egl.profiler" 2021-04-25 14:11:16.423 1545-1545/kim.hsl.webp E/MainActivity: libwebp 函數庫版本 : 1537 2021-04-25 14:11:16.703 1545-1545/kim.hsl.webp E/MainActivity: 解碼 png 格式圖片時間 : 280 2021-04-25 14:11:16.903 1545-1545/kim.hsl.webp E/MainActivity: 解碼 WebP 格式圖片時間 : 200 2021-04-25 14:11:19.584 1545-1545/kim.hsl.webp E/MainActivity: 編碼 png 格式圖片時間 : 2411 ms , 輸出文件 : /data/user/0/kim.hsl.webp/cache/icon_png.png 2021-04-25 14:11:22.659 1545-1545/kim.hsl.webp E/MainActivity: 編碼 WebP 格式圖片時間 : 3074 ms , 輸出文件 : /data/user/0/kim.hsl.webp/cache/icon_webp.webp成功打印出 libwebp 的版本號 , 153715371537 ;
三、參考資料
參考文檔 :
-
創建 WebP 圖片 : https://developer.android.google.cn/studio/write/convert-webp
-
Android 中支持的媒體格式 : https://developer.android.google.cn/guide/topics/media/media-formats
-
isparta 工具官網 : http://isparta.github.io/
-
isparta 工具 GitHub 地址 : https://github.com/iSparta/iSparta
-
Google 提供的 WebP 工具 ( 國內不能訪問 ) : https://developers.google.com/speed/webp/download
-
Google WebP 主頁 : https://developers.google.com/speed/webp
-
WebP 相關工具下載頁 : https://developers.google.com/speed/webp/download
-
WebP工具和函數庫使用文檔 : https://developers.google.com/speed/webp/docs/using
Android NDK 編譯構建腳本參考文檔 :
- ndk-build 腳本 : https://developer.android.google.cn/ndk/guides/ndk-build
- Android.mk 構建腳本 : https://developer.android.google.cn/ndk/guides/android_mk
- Application.mk 構建腳本 : https://developer.android.google.cn/ndk/guides/application_mk
博客資源 :
- iSparta 工具 : https://download.csdn.net/download/han1202012/17496041
- Google libwebp 庫 : https://download.csdn.net/download/han1202012/17498155
- libwebp 源碼及編譯相關資源 : https://download.csdn.net/download/han1202012/17826464 ( 源碼 , 編譯腳本 , 編譯結果 so 庫 )
博客源碼 :
- GitHub 地址 : https://github.com/han1202012/Webp
- CSDN 下載地址 : https://download.csdn.net/download/han1202012/18125733
總結
以上是生活随笔為你收集整理的【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】Android Studio
- 下一篇: 【Android 安装包优化】WebP