文章目录
一、 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.Bitmapimport android.graphics.BitmapFactoryimport android.os.Bundleimport android.util.Logimport androidx.appcompat.app.AppCompatActivityimport com.google.webp.libwebpimport java.io.FileOutputStreamimport 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")press(pressFormat.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")press(pressFormat.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} ")}}
打印结果 :
-04-25 14:11:16.249 1545-1646/kim.hsl.webp E/libc: Access denied finding property "vendor.debug.egl.profiler"-04-25 14:11:16.423 1545-1545/kim.hsl.webp E/MainActivity: libwebp 函数库版本 : 1537-04-25 14:11:16.703 1545-1545/kim.hsl.webp E/MainActivity: 解码 png 格式图片时间 : 280 -04-25 14:11:16.903 1545-1545/kim.hsl.webp E/MainActivity: 解码 WebP 格式图片时间 : 200 -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-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./studio/write/convert-webp
Android 中支持的媒体格式 :https://developer./guide/topics/media/media-formats
isparta 工具官网 :http://isparta.github.io/
isparta 工具 GitHub 地址 :/iSparta/iSparta
Google 提供的 WebP 工具 ( 国内不能访问 ) :/speed/webp/download
Google WebP 主页 :/speed/webp
WebP 相关工具下载页 :/speed/webp/download
WebP工具和函数库使用文档 :/speed/webp/docs/using
Android NDK 编译构建脚本参考文档 :
ndk-build 脚本 :https://developer./ndk/guides/ndk-buildAndroid.mk 构建脚本: https://developer./ndk/guides/android_mkApplication.mk 构建脚本 :https://developer./ndk/guides/application_mk
博客资源 :
iSparta 工具 :/download/han120/17496041Google libwebp 库 :/download/han120/17498155libwebp 源码及编译相关资源: /download/han120/17826464 ( 源码 , 编译脚本 , 编译结果 so 库 )
博客源码 :
GitHub 地址 :/han120/WebpCSDN 下载地址 :/download/han120/18125733
【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )