心理分析:面试官非常注重性能优化,考验求职者是否具备APK压缩能力。
**求职者:**应该从每一步压缩开始。压缩过程的本质就是牙膏一步步挤出的过程。将Apk压缩分为8步
介绍
随着项目的不断迭代,代码量和资源文件量不断增加。那么打包后的APK文件就会越来越大。如果有一天你的老板或者领导突然要求你优化APK大小,而你又不知道如何优化,那就有点不合理了。本文我们就来一起分析和优化。 APK 大小。
分析APK资源使用情况
注:
我在GitHub 上发现了一个流行的开源项目。如有需要,您可以点击下载并自行尝试。
AS Build/Analyze APK 直接由分析工具使用
从上图可以得出,其中资源文件占用面积最大的是assetsclasses.dexreslib。
我们来看看如何减小APK 的大小。
优化APK 大小的八个步骤
1.将图片转换为webp格式
网页概念
WebP 是一种提供有损和无损压缩的图像文件格式。它源自视频编码格式VP8。 WebP 最初于2010 年发布,目标是减小文件大小但实现与JEPG 格式相同的图像质量,希望减少图像文件通过网络发送所需的时间。 2011年11月8日,Google开始让WebP支持无损压缩和透明颜色。
根据Google 的早期测试,与网络上的PNG 文件相比,WebP 的无损压缩可将文件大小减少45%,即使使用PNGCRUSH 和PNGOUT 处理这些PNG 文件,WebP 也可将文件大小减少28%。到目前为止,Webp 可以平均缩小70% 的图像尺寸。 WebP是未来图像格式的发展趋势。
PNG/JPG 到Webp
右键单击图像或文件夹,选择转换为Webp格式,将png/jpg图像压缩为webp格式图像。
最终我们只减少了不到200kb的大小。有可能项目的图片资源本来就不是很大,只是小图片太多造成的。
应用场景及优势
客户端软件嵌入了基于Chromium 的Webview。这类浏览器使用的网页完全可以使用WebP格式来提高加载和渲染速度,而不管兼容性如何。对于使用node-webkit开发的程序,WebP可以减少文件包的大小。对于移动应用或者网页游戏,界面需要大量图片,可以嵌入WebP解码包,可以节省用户流量,提高访问速度。优点:对于PNG 图像,WebP 比PNG 小45%。 2. 删除多种语言
这里我们看到减少了大约200 kb
3.删除不必要的so库
近600 kb 已经优化并仍在继续。
4.删除无用资源链接检查(谨慎删除)
概念
Lint是Android Studio提供的代码扫描和分析工具。它可以帮助我们发现代码结构/质量问题并提供一些解决方案。这个过程不需要我们手写测试用例。当代码迭代过多时,很容易留下一些无用的代码和资源文件。我们可以使用Lint 来清理它们。
如何使用链接检查
打开AS工具,找到Analyze Run Inspection By Name未使用的资源
优化
发现我们的链接已经优化到700kb左右才能继续。
注意
优化了约1.7M才能继续。
6.删除无用资源shineResource
开启shineResource=true
有可能是link删除了无用的资源,所以不再优化了。
7.启用删除无用资源(严格模式和普通模式)——我这里无法测试这个,你可以下来测试一下效果
普通模式也是自定义模式
如果您有要保留或丢弃的特定资源,请在项目中创建一个包含resources 标记的XML 文件,并在tools:keep 属性中指定要保留的每个资源,在tools:discard 属性中指定要丢弃的每个资源。资源。这两个属性都接受以逗号分隔的资源名称列表。您可以使用星号字符作为通配符。
指定要丢弃的资源可能看起来很愚蠢,因为您可以直接删除它们,但在使用构建变体时它可能很有用。例如,如果您知道给定资源表面上将在代码中使用(因此不会被压缩器删除),但实际上不会在给定构建变体中使用,则可以将所有资源放入公共项目目录中。然后为每个构建变体创建不同的keep.xml 文件。如果需要,构建工具也可能无法正确识别资源,因为编译器会内联添加资源ID,而资源分析器可能不知道实际引用的资源与代码中碰巧具有相同值的整数值之间的差异。
严格模式
正常情况下,资源压缩器可以准确判断系统是否正在使用资源。但是,如果您的代码调用Resources.getIdentifier() (或您的任何库调用- AppCompat 库调用),则意味着您的代码将根据动态生成的字符串查询资源名称。当您进行此调用时,默认情况下,资源压缩器将采取防御措施,并将具有匹配名称模式的所有资源标记为可能已使用且无法删除。
8.AndResGuard微信资源压缩方案
什么是AndResGuard
AndResGuard 是一个减少APK 大小的工具。其原理与Java Proguard类似,但仅针对资源。它将缩短原本冗长的资源路径,例如将res/drawable/wechat 缩短为r/d/a。
为什么使用AndResGuard
在以前的开发中,我们通常只是对代码进行混淆,但是资源文件暴露给了别人,而且res文件夹中的所有文件名都太不可读了。
使用后效果
AndResGuard配置
在项目根目录下的build.gradle中,添加插件的依赖: 在app目录下,创建and_res_guard.gradle文件。将app模块下的build.gradle文件添加到打包后的渲染中。
资源压缩到1M左右
总结
标签:
用户评论
哇,终于找到这篇关于Android压缩的博文了!我一直想知道Apk极限压缩的步骤,希望这篇能帮到我。
有13位网友表示赞同!
看了这个标题,我就知道我之前的方法太low了。期待这篇关于Apk压缩的8大步骤,希望能学到一些新技巧。
有16位网友表示赞同!
Apk极限压缩,听起来好高大上,不知道这8大步骤是不是真的能让我节省空间还能保持应用流畅。
有15位网友表示赞同!
这8大步骤太实用了,我之前压缩Apk的时候总是担心会影响到应用性能,这篇博文应该能解决我的担忧。
有15位网友表示赞同!
压缩Apk还能有这么多讲究啊?这篇博文让我对Android压缩有了更深的认识,谢谢分享!
有10位网友表示赞同!
我一直觉得Apk文件太大,这篇博文提到的8大步骤看起来挺科学的,打算试试看。
有12位网友表示赞同!
Apk极限压缩,这8大步骤得试试看,看能不能让我那些App的安装包变小一点。
有9位网友表示赞同!
文章说极限压缩,那肯定得是极限操作了,不过我还是会小心翼翼地尝试一下,毕竟Apk压缩对手机性能影响挺大。
有14位网友表示赞同!
8大步骤有点复杂,不过我还是会耐心看完的,毕竟Apk压缩是每个Android用户都会遇到的痛点。
有14位网友表示赞同!
这篇博文对于新手的我来说有点难懂,希望能有更详细的解释或者实例教程。
有11位网友表示赞同!
压缩Apk还能有这么多门道,之前真不知道。这8大步骤一定要好好研究研究。
有10位网友表示赞同!
看了这篇博文,我对Apk压缩有了新的认识,之前压缩Apk总是怕影响性能,现在可以放心尝试了。
有15位网友表示赞同!
8大步骤虽然看起来挺多,但只要能让我节省空间,我还是愿意尝试的。
有18位网友表示赞同!
这篇博文让我对Android压缩有了新的看法,之前总是觉得Apk文件不能压缩太多,现在知道了其实有方法可以做到极限压缩。
有18位网友表示赞同!
这8大步骤对于开发者来说应该很有用,我打算分享给团队里的同事一起学习。
有11位网友表示赞同!
Apk极限压缩听起来就很有挑战性,我一定要试试看能不能将我的App压缩到极致。
有7位网友表示赞同!
这篇博文让我对Apk压缩有了新的认识,之前总是觉得这东西不可控,现在知道了其实有方法可以做到。
有5位网友表示赞同!
8大步骤有点复杂,不过我还是会耐心看完,毕竟Apk压缩是个长期问题,能学到新东西总是好的。
有16位网友表示赞同!
这篇博文太及时了,我正为App的Apk文件过大而烦恼,希望这8大步骤能帮我解决这个难题。
有13位网友表示赞同!
看完这篇博文,我对Apk压缩有了新的理解,看来我得重新审视我的压缩方法了。
有10位网友表示赞同!