热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我对公司APK做了个瘦身

hello,大家好,鸡年第一篇blog,因为节后到现在一直比较忙,上班忙工作,下班忙上分,王者农药,喝了就停不下来…开篇语最近接到老大一个任务:为我们的应用做瘦身.我们电商类项目到

hello, 大家好,鸡年第一篇blog, 因为节后到现在一直比较忙,上班忙工作,下班忙上分,王者农药,喝了就停不下来…

开篇语

最近接到老大一个任务:为我们的应用做瘦身.我们电商类项目到现在维护到2.7.0 APK 已经有35M了,说实话已经很大了.通过这两天的努力把安装包从35M瘦身到了23.8M.这其实还不是极限,由于一些原因的限制目前就到23.8M 为止.做个记录,方便以后 review 也为大家提供参考.

安装包的组成

不废话直接上图:

《我对公司 APK 做了个瘦身》

来看看我们 APK 结构分布:
在 Android Studio 2.2.3 开始,就加入了浏览 APK 结构的功能,我们直接把安装包拖入 IDE ,就可以直接浏览其组成和对应大小,这样能够很方便的对比分析出每一步优化后的结果。

《我对公司 APK 做了个瘦身》

如图, 资源文件和 lib 在 APK 中比例最高,所以重点拿这两个地方开刀.

第一刀: 资源文件的处理

因为公司的产品比较稳定,所以一些产品图我们保存在了 res 本地中,所以导致了 res 文件过大.其实最好的解决方法,当然是将比较大的产品图放在后台服务器,由于公司后台人员最近比较忙,而且对后台来说这个工程还是蛮大的,所以自己动手,丰衣足食咯…
我们项目中的所有图片都是 png 格式的,这点比较好了,关于图片处理,我首先想到的就是压缩了.虽然 png 和其他格式图片比,本身就比较轻量了,但是还是有很大压缩空间的,因为产品图,在我们项目中只是个缩略图,不需要高保真.
找到了几个压缩工具:

  • ImageOptim:https://imageoptim.com/mac ,支持压缩 PNG/JPEG/GIF ,而且效果显著,我用的就是这个工具.可以看看这里 https://www.diycode.cc/topics/496 ,遗憾的是它只支持 Mac ,Windows 党很难过。
  • TinyPNG:https://tinypng.com/ ,支持对 PNG/JPEG 文件做压缩处理,效果不错。
  • pngquant:https://pngquant.org/ , 支持 PNG 压缩,有时候 TinyPNG 处理过的图片噪点会稍多,可以考虑用 pngquant 来处理。
    来看下效果:
    《我对公司 APK 做了个瘦身》
    由于一些变量控制没做到位,所以效果显示稍差,实际 APK 大概减小2M

第二刀: lib 处理

lib 中主要是一些第三方 sdk 中的 so 文件,Native 库瘦身主要是减小对 CPU 架构的支持.关于 CPU 架构支持,不了解的,传送门附上:https://zhuanlan.zhihu.com/p/23102158
出于好奇,分析了下微信的 APK 发现他的 lib 下只有 armeabi ,看过上篇文章就明白了.
来看下我们的 APK 吧:

《我对公司 APK 做了个瘦身》

看到这个,瞬间来了精神,知道这块瘦身空间有多大了吧.

根据我们用户的机型分布,最终只保留了对 armeabi-v7a 支持.注意,这里需要根据自家产品的实际情况来决定。

配置起来很简单,在 build.gradle 使用 abiFilters 配置需要用到的 CPU 架构,并将不需要兼容的 so 文件从项目中移除即可。

《我对公司 APK 做了个瘦身》

看一下成果:

《我对公司 APK 做了个瘦身》


推荐阅读
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
麦芽糖的-寂寞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有