文章目录

  • 一、 libwebp 源码下载
  • 二、 libwebp 源码编译脚本修改
  • 三、 libwebp 函数库编译
  • 四、参考资料

一、 libwebp 源码下载


Google 提供了一系列的 WebP 相关工具和函数库 , 如 cwebp , dwebp , gif2webp , img2webp 等工具 , libwebp 函数库 ;

  • 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

下载 WebP 库源码 :

二、 libwebp 源码编译脚本修改


将该源码解压 , 该项目的源码可以使用多种方式编译 , 有 CMakeLists.txt , Android.mk , Makefile , configure 各种编译 C/C++ 代码的构建脚本 , 说明该项目提供了很多种构建方式 , 任选一种都可以编译出想要的结果 ;

这里选择使用 Android.mk 方式进行编译 ; 之前使用 Eclipse + ADT 开发 NDK 功能时使用 Android.mk 构建 C/C++ 程序 , 使用 Android Studio 之后 , 就开始使用 CMakeLists.txt 构建脚本了 ;

具体的编译方式可以参考 https://developers.google.com/speed/webp/docs/using 中的相关文档 ;

打开 Android.mk 构建脚本 , 该构建脚本需要进行配置 , 在第 222 换行添加如下配置 , 表示使用 NDK 进行编译时 , 生成 so 动态库 , 以方便在 Android 中使用 ;

ENABLE_SHARED := 1

定位到 # libwebp 所在行 ,

################################################################################
# libwebpinclude $(CLEAR_VARS)LOCAL_SRC_FILES := \$(dsp_enc_srcs) \$(enc_srcs) \$(utils_enc_srcs) \LOCAL_CFLAGS := $(WEBP_CFLAGS)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src# prefer arm over thumb mode for performance gains
LOCAL_ARM_MODE := armLOCAL_WHOLE_STATIC_LIBRARIES := webpdecoder_staticLOCAL_MODULE := webpifeq ($(ENABLE_SHARED),1)include $(BUILD_SHARED_LIBRARY)
elseinclude $(BUILD_STATIC_LIBRARY)
endif################################################################################

LOCAL_MODULE := webp 表示编译的该模块是 webp 模块 , 模块名称是 webp , 编译出的动态库是 libwebp.so ;

LOCAL_SRC_FILES 指定的是编译的源文件 , 在该处多附加一个源文件 , " swig/libwebp_java_wrap.c " ;

LOCAL_SRC_FILES := \$(dsp_enc_srcs) \$(enc_srcs) \$(utils_enc_srcs) \swig/libwebp_java_wrap.c \

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

在源码根目录中 , 创建 Application.mk 配置文件 ,


编辑 Application.mk 构建脚本 ;

APP_ABI := armeabi-v7a arm64-v8a x86
APP_PLATFORM := android-14

APP_ABI := armeabi-v7a arm64-v8a x86 指定编译的 CPU 架构 ;

APP_PLATFORM := android-14 指定编译的最小平台版本 ;

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

三、 libwebp 函数库编译


为了方便 ndk-build 编译 , 这里将源码根目录 libwebp-0.6.1 改名为 jni , 在 jni 的上一级目录执行

Y:\001_DevelopTools\002_Android_SDK\ndk\22.0.7026061\ndk-build.cmd

命令 , 其中 Y:\001_DevelopTools\002_Android_SDK\ndk\22.0.7026061\ 是 NDK 的绝对了路径 ;

执行过程 :

执行完成后 , 生成如下两个目录 : libs 和 obj ;

四、参考资料


参考文档 :

  • 创建 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/17574192

【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )相关推荐

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

    文章目录 一. Android Studio 中导入 libwebp.so 库 二. Android Studio 中测试 libwebp.so 库 三.参考资料 一. Android Studio ...

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

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

  3. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )

    文章目录 一.resources.arsc 资源映射表文件格式 二.头文件 数据格式 三.全局字符串池 数据格式 四.包数据 数据格式 1.包头 数据格式 2.资源类型字符串池 数据格式 3.资源名称 ...

  4. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

    文章目录 一.resources.arsc 资源映射表 混淆 二.resources.arsc 资源映射表二进制格式分析 三.参考资料 资源混淆时 , 需要修改混淆 resources.arsc 资源 ...

  5. 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

    文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...

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

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

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

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

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

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

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

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

最新文章

  1. oracle sqlserver 查看指定用户下面的表
  2. 下一个人才大缺口:量子计算研究人员
  3. 网页设计/移动开发学习资源推荐
  4. 东网科技荣膺2016中国大数据最佳实践奖
  5. 栈 php 验证格式,表单验证 - 《Biny - 高性能轻量级PHP框架》 - 书栈网 · BookStack...
  6. 【Android教程】Android用户系统管理
  7. div 置底 形成页脚
  8. Android的广播接收器BroadcastReceiver
  9. 返回表单字符串php,PHP字符串如何截取表单内的内容?
  10. Atitit opencv3.0  3.1 3.2 新特性attilax总结
  11. 矩阵的几个基本概念(一)
  12. android pdf 乱码怎么解决方案,pdf文件打开是乱码怎么办?pdf字体乱码的解决办法...
  13. c语言实训自我总结报告,C++实训总结报告
  14. vue项目IE浏览器中打不开,为空白页
  15. 独立IP 独立访客 PV 之间的联系与区别
  16. java刮刮乐,20行JS代码实现网页刮刮乐效果
  17. 极域课堂分发文件与一键开关机教程
  18. 兴趣点推荐代码_如何解读霍兰德职业兴趣测评结果?
  19. [AR Foundation] 人脸检测的流程
  20. chromedriver 下载地址 国内淘宝镜像

热门文章

  1. 15 个变量和方法命名的最佳实践
  2. 二维码QR Code不是一个产品,是一个功能
  3. 轻松学MVC4.0–4 扩展UserProfile
  4. php中$GLOBALS
  5. Bluetooth4.0
  6. 《数据中心布线系统的设计与施工技术白皮书》目录
  7. 关于服务器返回信息的Unicode转码的方法
  8. WPF后台操作前台元素之查找对象
  9. 设置dialog显示,自定义时间到后dialog消失
  10. 《当程序员的那些狗日日子》(十二)公司里的靓丽风景