文章目录

  • 一、 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 打包指令集 , 这里全设置 ;

android {defaultConfig {//配置 APK 打包 哪些动态库//  示例 : 如在工程中集成了第三方库 , 其提供了 arm, x86, mips 等指令集的动态库//        那么为了控制打包后的应用大小, 可以选择性打包一些库 , 此处就是进行该配置ndk{// 打包生成的 APK 文件指挥包含 ARM 指令集的动态库abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"}}
}

在使用 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 库测试可用性 )相关推荐

  1. 【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )

    文章目录 一.测试 WebP 图片解码速度 二.测试 WebP 图片编码速度 三.参考资料 测试结果 : WebP 格式图片 , 解码快 , 编码慢 , 占用空间小 ; 在解码速度上 , WebP 格 ...

  2. 【Android 安装包优化】Android 中使用 SVG 图片 ( Android 5.0 以下的矢量图方案 | 矢量图生成为 PNG 图片 )

    文章目录 一.Android 5.0 以下的矢量图方案 二.矢量图生成为 PNG 图片 三.完整的 build.gradle 构建脚本 四.编译效果 五.参考资料 一.Android 5.0 以下的矢 ...

  3. 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )

    文章目录 一.开启资源压缩 二.启用严格模式的资源引用检查 三.自定义保留/移除资源配置 四.资源压缩效果 五.完整配置 1.keep.xml 配置 2.build.gradle 构建脚本 六.参考资 ...

  4. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

  5. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

  6. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.完整代码示例 1.Java 层代码 2.JNI 层代码 3.日志头文件 4.执行结果 四.参考资料 前置博客 ...

  7. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...

  8. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )

    文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...

  9. 【Android 安装包优化】Android 中使用 7zr 可执行程序 解压缩文件

    文章目录 一.Android 中使用 7zr 可执行程序 解压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序 解压缩文件 在上一篇博客 [Android 安装包 ...

最新文章

  1. 企业融入租时代 谋求轻资产化高效运营
  2. 动态验证码制作(RandomCodeImage )
  3. netty源码深度分析
  4. 表单元素聚焦状态回车提交表单问题小记
  5. 关于Vmware ESX 4.1添加第二个Servier Console 却无法添加网关的解决方法
  6. 爬虫用java还是python_网络爬虫是用python比较好,还是Java比较好呢?
  7. Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)
  8. Tomcat access log配置
  9. 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客
  10. 破解百词斩单词数据之旅
  11. 大话设计模式之爱你一万年:第十三章 行为型模式:策略模式:女友在手,说走就走:1.策略模式概念
  12. WIN10 下 autocad2006 及其他版本打开文件多窗口不能一个窗口的解决办法
  13. HTML 表单 (form) 的作用解释
  14. 【Python进阶】9- Pandas的应用
  15. clip-summary
  16. 陈臣java_小菜学设计模式——享元模式
  17. oracle判断不是null,oracle中判断不为null
  18. ESP32 DEVKIT V1 资料分享-原理图+引脚图
  19. Android内存泄漏检测工具使用手册
  20. STM32 PC13 PC14 PC15用作普通IO口

热门文章

  1. 简单的Tab切换组件
  2. Object_Type列表
  3. 微软在你的计算机里隐藏的秘密
  4. MongoDB · 引擎特性 · MongoDB索引原理
  5. Object处理方法的返回值
  6. POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)
  7. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决...
  8. 负margin的移位参考线
  9. ZOJ 1049 2^x mod n = 1
  10. 再探Javascript词法作用域