前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )

【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )

作者头像
韩曙亮
发布2023-03-29 10:28:56
8190
发布2023-03-29 10:28:56
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

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

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

在使用 libwebp.so 的类中 , 需要手动加载动态库 ;

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {

    companion object{
        val TAG = "MainActivity"
        init {
            System.loadLibrary("webp")
        }
    }
}

二、 Android Studio 中测试 libwebp.so 库


调用一下 libwebp 库中的 WebPGetDecoderVersion() 函数 , 查看是否能使用 ;

代码语言:javascript
复制
package kim.hsl.webp

import 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.ByteBuffer

class 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} ")
    }
}

打印结果 :

代码语言:javascript
复制
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 的版本号 , 1537 ;

三、参考资料


参考文档 :

Android NDK 编译构建脚本参考文档 :

博客资源 :

博客源码 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、 Android Studio 中导入 libwebp.so 库
  • 二、 Android Studio 中测试 libwebp.so 库
  • 三、参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档