文章目录

  • 一、压缩 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 图片 )相关推荐

  1. Android如何自定义Gradle插件

    Android-如何自定义gradle插件 自定义gradle插件可以实现定制自己的构建流程,以达到复用目的: ##1. 自定义插件方式 自定义插件有三种方式 添加脚步 在你的app项目的build. ...

  2. 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )

    文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...

  3. Android组件化开发实践(九):自定义Gradle插件

    本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...

  4. 创建第一个适用于Android的自定义Gradle插件-第2部分:在构建时生成资源

    A hands on tutorial to get started with adding custom functionality to your Android builds using Kot ...

  5. android加固 app插件化,自定义Gradle插件给应用加固

    场景 当我们发布app时候都会选择一个加固的形式给我们的apk加壳,本文章就360加固为例,如何用gradle的方式在我们apk生成后自动加固. 自定义插件 自定义插件其实说白了就是在gradle里面 ...

  6. Android 自定义gradle插件

    android自定义gradle插件的步骤 1.首先我们新建一个android项目 2.然后新建一个android module a.删除一些不需要的文件目录,然后新建groovy,resources ...

  7. android studio离线配置gradle插件_Gradle 扫盲与 Task 基础

    Gradle 是用于构建项目的工具,除了管理依赖库之外,Gradle 还支持我们自己添加编译脚本.添加编译配置等控制项目的构建,通过提供 API 我们可以控制编译的每一步操作. Gradle 目前使用 ...

  8. 使用AndroidStudio创建自定义gradle插件并被引用实战例子

    项目中引入自定义Gradle plugin一般有三种方法: 直接写在 build.gradle中. plugin源码放到rootProjectDir/buildSrc/src/main/groovy目 ...

  9. 自定义Gradle插件(十)

    目录 1. 脚本插件 2. 对象插件 在build.gradle中写Plugin 创建单独的 "buildSrc" Module 上传远端maven仓库 gradle插件分成脚本插 ...

  10. AS 自定义 Gradle plugin 插件 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

最新文章

  1. h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器
  2. 数据结构和算法分析:第六章 优先队列(堆)
  3. Lesson 7(12)神经网络的诞生与发展机器学习基本概念
  4. c语言数组宏定义标识符,C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针...
  5. 算法系列之选择排序算法
  6. Android学习笔记-ListView
  7. php 获取用户名,php 获取Feedburner的用户名示例
  8. php单独输出每个单词,PHP:在特定短语/单词之后搜索文本文件并输出
  9. VC实现多格式图像的转换
  10. 解决Mac下Parallels Desktop的Host-only网络问题
  11. python连接服务器informix_Python 用odbc连接Informix数据库 64位
  12. Word 2019怎样自定义模板,并将自定义模板设为默认模板
  13. AXI协议(5):AXI协议的burst机制
  14. 亿阳信通面试 亿阳信通笔试 面经大全
  15. 程序员的遮羞布:这个需求技术上无法实现
  16. ROS2+nav2+激光雷达导航(上)
  17. postman批量刷接口
  18. 多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术
  19. 基于Vue3+Spring Boot+Web的学生选课管理系统
  20. 视频教程-学校网管员培训视频教程-网络技术

热门文章

  1. DDD案例(2):从领域分析到代码实现
  2. guided filter(导向滤波)导读
  3. arn : 无法加载文件 C:\Users\zky\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.
  4. 【LOJ#6198】—谢特(后缀数组+01Trie)
  5. 北风:个人如何在职场中野蛮生长
  6. SpringBoot实现短信验证码校验
  7. 讨论下2018年的北京房市(长文慎入)
  8. 图片加载之前显示 加载中或者加载中图片
  9. element-UI设置背景色和边框色
  10. AR - 增强现实技术(AR)的103个应用场景汇总