Android apk 瘦身

apk瘦身的意义我就不多说了,首先让我们了解一个apk的组成部分,说简单点,一个apk文件就是包含一些文件的压缩包。作为开发者,我们通过使用unzip命令解压这个apk文件一探apk的内部结构。下面的文件结构就是我们使用unzip .apk1这个命令所获得的:


了解完apk的组成部分后,apk瘦身我们大致可以从这几方面下手: 1 减少java代码 2 减少资源文件 3 减少native_code

所以我们得养成良好的编程习惯,删除不必要的代码和重复无用的一些资源文件,比如图片,xml等。尽可能重用一些资源。但是如果我们是接手别人项目或者之前习惯不好,而导致太过臃肿等问题,这时候我们可以借助一些工具。

使用 Proguard

Proguard 是一个很强悍的工具,它可以帮你在代码编译时对代码进行混淆,优化和压缩。它有一个专门用来减少apk文件大小的功能叫做 tree-shaking。Proguard 会遍历你的所有代码然后找出无用处的代码。所有这些不可达(或者不需要)的代码都会在生成最终的apk文件之前被清除掉。Proguard 也会重命名你的类属性,类和接口,然整个代码尽可能地保持轻量级水平。

也许现在你会认为 Proguard 是一个相当有效地工具。但是能力越大,责任也就越大。现在许多开发这认为Proguard有点让人不省心,因为它会重度依赖反射。哪些类或者属性需要被处理或者不能处理都要开发者对 Proguard 进行配置。

使用 Lint

Proguard 只会对 Java 代码起作用,那么对哪些资源文件呢?比如一张图片my_image在res/drawable文件夹中,没有被使用,Proguard 只会移除掉R类中的引用,但是图片依然还在文件夹中。

Lint 一个静态的代码分析器,你只需通过调用./gradlew lint这个简单地命令它就能帮你检查所有无用的资源文件。它在检测完之后会提供一份详细的资源文件清单,并将无用的资源列在“UnusedResources: Unused resources” 区域之下。只要你不通过反射来反问这些无用资源,你就可以放心地移除这些文件了。

Lint 会分析资源文件(比如/res文件夹下面的文件) ,但是会跳过 assets 文件 (/assets文件夹下面的文件)。事实上assets 文件是可以通过它们的文件名直接访问的,而不需要通过Java引用或者XML引用。因此,Lint 也不能判定某个 asset 文件在项目中是否有用。这全取决于开发者对这个文件夹的维护了。如果你没有使用某个asset 文件,那么你就可以直接清除这个文件。

对资源文件进行取舍:

这里主要涉及到屏幕适配的图片问题,可以根据我们产品用户的层次来进行适配,现在市场上大多数手机都是1280 * 800 以上的,我们只需适配一两套图片即可,我通常用的都是xhdpi。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文来自尚妆Android团队青峰发表于尚妆博客 APK瘦身探索 最近几周一直在研究如何为APK瘦身,折腾了很久,...
    尚妆产品技术刊读阅读 1,886评论 1 23
  • Android APK瘦身经验总结 写在前面: 无论手机的内存有多大, 我们自然都希望一个应用的安装包能越小越好,...
    MeloDev阅读 4,701评论 1 35
  • 互联网时代是一个追求效率的时代,大部分用户会因为下载时间、流量消耗、手机存储空间选择较小的app,所以apk瘦身至...
    俺叫瓦小力阅读 2,651评论 1 1
  • 瘦身意味了什么呢?人们瘦身味了更好的身体和更匀称的身材。那么app呢?提高下载转化率,用户在无wifi情况下少用流...
    乐之飞于阅读 656评论 0 3
  • 翌日,灵影号主甲板,一个高台在船首搭建而起。虽然看上去用料简易,但每一个细节做的都很到位。红色地毯从台上一直延伸到...
    暄duai阅读 384评论 2 3

友情链接更多精彩内容