【Android Gradle 插件】自定义 Gradle 插件优化图片 ② ( 压缩 png、jpg 图片 | 使用 pngcrush 压缩工具压缩 png 图片 )
文章目录
- 一、压缩 png、jpg 图片
- 二、使用 pngcrush 压缩工具压缩 png 图片
Android Plugin DSL Reference 参考文档 :
Android Studio 构建配置官方文档 : https://developer.android.google.cn/studio/build
添加构建依赖项 参考文档 : https://developer.android.google.cn/studio/build/dependencies
Android Gradle 插件配置与 Gradle 配置关联 : 【Android Gradle 插件】Gradle 依赖管理 ① ( org.gradle.api.Project 配置 | Android Gradle 插件配置与 Gradle 配置关联 ) ★
Android Gradle 插件文档主页 : https://google.github.io/android-gradle-dsl/2.3/
BaseExtension 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.BaseExtension.html
AppExtension ( build.gradle#android 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.AppExtension.html
build.gradle#android 模块配置文档 : android-gradle-dsl/2.3/com.android.build.gradle.AppExtension.html
ProductFlavor ( build.gradle#android#defaultConfig 配置 ) 文档 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.ProductFlavor.html
ProductFlavor#externalNativeBuild 配置 ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) : com.android.build.gradle.internal.dsl.ProductFlavor:externalNativeBuild
ExternalNativeBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.ExternalNativeBuildOptions.html
NdkBuildOptions ( build.gradle#android#defaultConfig#externalNativeBuild#ndkBuild 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.NdkBuildOptions.html
CmakeOptions ( build.gradle#android#defaultConfig#externalNativeBuild#cmake 配置 ) 文档位置 : android-gradle-dsl-gh-pages/2.3/com.android.build.gradle.internal.dsl.CmakeOptions.html
JackOptions ( build.gradle#android#defaultConfig#jackOptions 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.JackOptions.html
AnnotationProcessorOptions ( 注解处理器配置 ) ( build.gradle#android#defaultConfig#javaCompileOptions配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AnnotationProcessorOptions.html
NdkOptions ( build.gradle#android#defaultConfig#ndk 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.NdkOptions.html
NDK 参考文档 : Add C and C++ Code to Your Project.
VectorDrawablesOptions ( build.gradle#android#defaultConfig#vectorDrawables 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html
BuildType ( build.gradle#android#buildTypes 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.BuildType.html
SigningConfig ( build.gradle#android#signingConfigs 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.SigningConfig.html
AaptOptions ( build.gradle#android#aaptOptions 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AaptOptions.html
AndroidSourceSets ( build.gradle#android#sourceSets 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceSet.html
AndroidSourceDirectorySet ( build.gradle#android#sourceSets#aidl/assets/java/jni/jniLibs 配置 ) 文档位置 :android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceDirectorySet.html
AndroidSourceFile ( build.gradle#android#sourceSets#manifest 配置 ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.api.AndroidSourceFile.html
DataBindingOptions ( build.gradle#android#dataBinding ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DataBindingOptions.html
DexOptions ( build.gradle#android#dexOptions ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DexOptions.html
LintOptions ( build.gradle#android#lintOptions ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.LintOptions.html
PackagingOptions ( build.gradle#android#packagingOptions ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.PackagingOptions.html
Splits ( build.gradle#android#splits ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.Splits.html
AbiSplitOptions ( build.gradle#android#splits#abi ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.AbiSplitOptions.html
LanguageSplitOptions ( build.gradle#android#splits#language ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.LanguageSplitOptions.html
DensitySplitOptions ( build.gradle#android#splits#density ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.DensitySplitOptions.html
TestOptions ( build.gradle#android#testOptions ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.TestOptions.html
Android 测试相关文档 : https://developer.android.google.cn/training/testing
UnitTestOptions ( build.gradle#android#testOptions#unitTests ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.TestOptions.UnitTestOptions.html
org.gradle.api.tasks.testing.Test 单元测试配置类 : https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/Test.html
LibraryExtension ( Library 依赖库的 build.gradle#android 配置 ) 文档 : android-gradle-dsl/2.3/com.android.build.gradle.LibraryExtension.html
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
org.gradle.api.initialization.Settings 配置 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/initialization/Settings.html
org.gradle.api.artifacts.dsl.DependencyHandler 配置 ( build.gradle#dependencies#implementation 配置 ) : https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/dsl/DependencyHandler.html
添加构建依赖项 参考文档 : https://developer.android.google.cn/studio/build/dependencies
org.gradle.api.Task 配置 ( Gradle 任务类型 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Task.html
org.gradle.api.tasks.TaskContainer配置 ( Gradle 任务容器类型 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/TaskContainer.html
org.gradle.api.DefaultTask 配置 ( Gradle 自定义任务类父类 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/DefaultTask.html
org.gradle.api.tasks.Delete 自带任务 ( clean 任务类型 ) 文档 : https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Delete.html
org.gradle.api.tasks.bundling.Zip 自带任务 ( 任务类型 ) 文档 :https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html
org.gradle.api.tasks.bundling.Jar自带任务 ( 任务类型 ) 文档 : https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html
Gradle 自带任务查询界面 ( 搜索 Task Types ) : https://docs.gradle.org/current/dsl/#N1045C
org.gradle.api.invocation.Gradle 文档 ( 可设置 Gradle 构建声明周期监听器 ) : https://docs.gradle.org/current/javadoc/org/gradle/api/invocation/Gradle.html
org.gradle.BuildListener 构建监听器 文档 : https://docs.gradle.org/current/javadoc/org/gradle/BuildListener.html
org.gradle.execution.TaskExecutionGraphListener 构建监听器 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/execution/TaskExecutionGraphListener.html
自定义 Gradle 插件 - GitHub 地址 : https://github.com/han1202012/Android_UI
一、压缩 png、jpg 图片
在 Android 应用中 , 最常见的图片格式是 png 和 jpg 格式 , 为这两种图片格式选择合适的图片压缩工具 :
- png 图片 : pngcrush 压缩工具 , 该工具时无损压缩工具 , 官网 https://pmt.sourceforge.io/pngcrush/ ;
- jpg 图片 : guetzli 压缩工具 ;
二、使用 pngcrush 压缩工具压缩 png 图片
pngcrush 官网 : https://pmt.sourceforge.io/pngcrush/
点击左上角的 按钮 , 即可进入下载页 ;
pngcrush 下载页 : https://sourceforge.net/projects/pmt/files/
下图中 , pngcrush 中是源码 , pngcrush-executables 是各个平台的可执行文件 , 这里我们选择下载 Windows 系统中的可执行文件 ;
进入可执行文件下载页面 https://sourceforge.net/projects/pmt/files/pngcrush-executables/ , 选择下载最新版本的软件 ;
在 https://sourceforge.net/projects/pmt/files/pngcrush-executables/1.8.11/ 页面中, 下载 Windows 系统中 64 位的可执行文件 ;
下载后 , 在 cmd 命令行中执行该程序 , 会提示使用方法 ;
D:\001_Develop\045_pngcrush>pngcrush_1_8_11_w64.exe| pngcrush-1.8.11| Copyright (C) 1998-2002, 2006-2016 Glenn Randers-Pehrson| Portions Copyright (C) 2005 Greg Roelofs| This is a free, open-source program. Permission is irrevocably| granted to everyone to use this version of pngcrush without| payment of any fee.| Executable name is pngcrush_1_8_11_w64.exe| It was built with bundled libpng-1.6.28| and is running with bundled libpng-1.6.28| Copyright (C) 1998-2004, 2006-2016 Glenn Randers-Pehrson,| Copyright (C) 1996, 1997 Andreas Dilger,| Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,| and bundled zlib-1.2.11, Copyright (C) 1995-2017,| Jean-loup Gailly and Mark Adler,| and using "clock()".| It was compiled with gcc version 4.8.0 20121031 (experimental).If you have modified this source, you may insert additional notices
immediately after this sentence.
Copyright (C) 1998-2002, 2006-2016 Glenn Randers-Pehrson
Portions Copyright (C) 2005 Greg RoelofsDISCLAIMER: The pngcrush computer program is supplied "AS IS".
The Author disclaims all warranties, expressed or implied, including,
without limitation, the warranties of merchantability and of fitness
for any purpose. The Author assumes no liability for direct, indirect,
incidental, special, exemplary, or consequential damages, which may
result from the use of the computer program, even if advised of the
possibility of such damage. There is no warranty against interference
with your enjoyment of the computer program or against infringement.
There is no warranty that my efforts or the computer program will
fulfill any of your particular purposes or needs. This computer
program is provided with all faults, and the entire risk of satisfactory
quality, performance, accuracy, and effort is with the user.LICENSE: Permission is hereby irrevocably granted to everyone to use,
copy, modify, and distribute this computer program, or portions hereof,
purpose, without payment of any fee, subject to the following
restrictions:1. The origin of this binary or source code must not be misrepresented.2. Altered versions must be plainly marked as such and must not be
misrepresented as being the original binary or source.3. The Copyright notice, disclaimer, and license may not be removed
or altered from any source, binary, or altered source distribution.usage: pngcrush_1_8_11_w64.exe [options except for -e -d] infile.png outfile.pngpngcrush_1_8_11_w64.exe -e ext [other options] file.png ...pngcrush_1_8_11_w64.exe -d dir/ [other options] file.png ...pngcrush_1_8_11_w64.exe -ow [other options] file.png [tempfile.png]pngcrush_1_8_11_w64.exe -n -v file.png ...
options:-bail (bail out of trial when size exceeds best size found-blacken (zero samples underlying fully-transparent pixels)-brute (use brute-force: try 148 different methods)-c color_type of output file [0, 2, 4, or 6]-check (check CRC and ADLER32 checksums)-d directory_name/ (where output files will go)-e extension (used for creating output filename)-f user_filter [0-5] for specified method-fix (salvage PNG with otherwise fatal conditions)-force (write output even if IDAT is larger)-g gamma (float or fixed*100000, e.g., 0.45455 or 45455)-huffman (use only zlib strategy 2, Huffman-only)-iccp length "Profile Name" iccp_file-itxt b[efore_IDAT]|a[fter_IDAT] "keyword"-keep chunk_name-l zlib_compression_level [0-9] for specified method-loco ("loco crush" truecolor PNGs)-m method [1 through 150]-max maximum_IDAT_size [default 524288L]-mng (write a new MNG, do not crush embedded PNGs)-n (no save; doesn't do compression or write output PNG)-new (Use new default settings (-reduce))-newtimestamp (Reset file modification time [default])-nobail (do not bail out early from trial -- see "-bail")-nocheck (do not check CRC and ADLER32 checksums)-nofilecheck (do not check for infile.png == outfile.png)-noforce (default; do not write output when IDAT is larger)-nolimits (turns off limits on width, height, cache, malloc)-noreduce (turns off all "-reduce" operations)
-noreduce_palette (turns off "-reduce_palette" operation)-old (Use old default settings (no -reduce))-oldtimestamp (Do not reset file modification time)-ow (Overwrite)-q (quiet) suppresses console output except for warnings-reduce (do lossless color-type or bit-depth reduction)-rem chunkname (or "alla" or "allb")
-replace_gamma gamma (float or fixed*100000) even if it is present.-res resolution in dpi-rle (use only zlib strategy 3, RLE-only)-s (silent) suppresses console output including warnings-save (keep all copy-unsafe PNG chunks)-speed Avoid the AVG and PAETH filters, for decoding speed-srgb [0, 1, 2, or 3]-ster [0 or 1]-text b[efore_IDAT]|a[fter_IDAT] "keyword" "text"-trns_array n trns[0] trns[1] .. trns[n-1]-trns index red green blue gray-v (display more detailed information)-version (display the pngcrush version)-warn (only show warnings)-w compression_window_size [32, 16, 8, 4, 2, 1, 512]-z zlib_strategy [0, 1, 2, or 3] for specified method-zmem zlib_compression_mem_level [1-9, default 9]-zitxt b|a "keyword" "lcode" "tkey" "text"-ztxt b[efore_IDAT]|a[fter_IDAT] "keyword" "text"-h (help and legal notices)-p (pause)D:\001_Develop\045_pngcrush>
使用 执行
pngcrush_1_8_11_w64.exe -brute -rem alla -reduce input.png output.png
命令 , 进行 png 图片压缩 ;
-brute
参数的作用是设置 " 从 148 种不同的方法中选择最合适的方案进行压缩 " ;-rem alla
参数作用是设置 " 移除 png 格式图片中无用的模块 " ;-reduce
参数作用是设置 " 排除无用的颜色 " ;
在命令最后有两个文件路径 , 前者是输入文件 , 后者是输出文件 ;
命令行输入如下 :
D:\001_Develop\045_pngcrush>pngcrush_1_8_11_w64.exe -brute -rem alla -reduce input.png output.pngRecompressing IDAT chunks in input.png to output.pngTotal length of data found in critical chunks = 4926Critical chunk length, method 1 (ws 15 fm 0 zl 4 zs 0) = 5151Critical chunk length, method 2 (ws 15 fm 1 zl 4 zs 0) > 5151Critical chunk length, method 3 (ws 15 fm 5 zl 4 zs 1) = 5137Critical chunk length, method 4 (ws 15 fm 0 zl 9 zs 1) > 5137Critical chunk length, method 5 (ws 15 fm 1 zl 9 zs 1) = 5062Critical chunk length, method 6 (ws 15 fm 5 zl 9 zs 0) = 4717Critical chunk length, method 7 (ws 15 fm 0 zl 9 zs 0) > 4717Critical chunk length, method 8 (ws 15 fm 1 zl 9 zs 1) > 4717Critical chunk length, method 9 (ws 15 fm 5 zl 2 zs 2) > 4717Critical chunk length, method 10 (ws 15 fm 5 zl 9 zs 1) = 4654Critical chunk length, method 11 (ws 15 fm 0 zl 2 zs 2) > 4654Critical chunk length, method 148 (ws 15 fm 5 zl 0 zs 1) > 4654Best pngcrush method = 10 (ws 15 fm 5 zl 9 zs 1) = 4654(5.52% critical chunk reduction)(5.64% filesize reduction)CPU time decode 0.011640, encode 4.277780, other 4.296384, total 4.291837 sec
压缩结果 : 源图 input.png 4.81KB , 转换后的图片 output.png 4.53KB ;
【Android Gradle 插件】自定义 Gradle 插件优化图片 ② ( 压缩 png、jpg 图片 | 使用 pngcrush 压缩工具压缩 png 图片 )相关推荐
- Android如何自定义Gradle插件
Android-如何自定义gradle插件 自定义gradle插件可以实现定制自己的构建流程,以达到复用目的: ##1. 自定义插件方式 自定义插件有三种方式 添加脚步 在你的app项目的build. ...
- 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )
文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...
- Android组件化开发实践(九):自定义Gradle插件
本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...
- 创建第一个适用于Android的自定义Gradle插件-第2部分:在构建时生成资源
A hands on tutorial to get started with adding custom functionality to your Android builds using Kot ...
- android加固 app插件化,自定义Gradle插件给应用加固
场景 当我们发布app时候都会选择一个加固的形式给我们的apk加壳,本文章就360加固为例,如何用gradle的方式在我们apk生成后自动加固. 自定义插件 自定义插件其实说白了就是在gradle里面 ...
- Android 自定义gradle插件
android自定义gradle插件的步骤 1.首先我们新建一个android项目 2.然后新建一个android module a.删除一些不需要的文件目录,然后新建groovy,resources ...
- android studio离线配置gradle插件_Gradle 扫盲与 Task 基础
Gradle 是用于构建项目的工具,除了管理依赖库之外,Gradle 还支持我们自己添加编译脚本.添加编译配置等控制项目的构建,通过提供 API 我们可以控制编译的每一步操作. Gradle 目前使用 ...
- 使用AndroidStudio创建自定义gradle插件并被引用实战例子
项目中引入自定义Gradle plugin一般有三种方法: 直接写在 build.gradle中. plugin源码放到rootProjectDir/buildSrc/src/main/groovy目 ...
- 自定义Gradle插件(十)
目录 1. 脚本插件 2. 对象插件 在build.gradle中写Plugin 创建单独的 "buildSrc" Module 上传远端maven仓库 gradle插件分成脚本插 ...
- AS 自定义 Gradle plugin 插件 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
最新文章
- h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器
- 数据结构和算法分析:第六章 优先队列(堆)
- Lesson 7(12)神经网络的诞生与发展机器学习基本概念
- c语言数组宏定义标识符,C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针...
- 算法系列之选择排序算法
- Android学习笔记-ListView
- php 获取用户名,php 获取Feedburner的用户名示例
- php单独输出每个单词,PHP:在特定短语/单词之后搜索文本文件并输出
- VC实现多格式图像的转换
- 解决Mac下Parallels Desktop的Host-only网络问题
- python连接服务器informix_Python 用odbc连接Informix数据库 64位
- Word 2019怎样自定义模板,并将自定义模板设为默认模板
- AXI协议(5):AXI协议的burst机制
- 亿阳信通面试 亿阳信通笔试 面经大全
- 程序员的遮羞布:这个需求技术上无法实现
- ROS2+nav2+激光雷达导航(上)
- postman批量刷接口
- 多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术
- 基于Vue3+Spring Boot+Web的学生选课管理系统
- 视频教程-学校网管员培训视频教程-网络技术
热门文章
- DDD案例(2):从领域分析到代码实现
- guided filter(导向滤波)导读
- arn : 无法加载文件 C:\Users\zky\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.
- 【LOJ#6198】—谢特(后缀数组+01Trie)
- 北风:个人如何在职场中野蛮生长
- SpringBoot实现短信验证码校验
- 讨论下2018年的北京房市(长文慎入)
- 图片加载之前显示 加载中或者加载中图片
- element-UI设置背景色和边框色
- AR - 增强现实技术(AR)的103个应用场景汇总