美文网首页Android
如何减小APK包

如何减小APK包

作者: 雾里看花六月天 | 来源:发表于2017-08-28 09:57 被阅读68次

减小apk的大小,不仅对自己是经验的积累,对公司的用户来说,在下载体验上,小的包下载时间很短,不用等太久,而且省流量,所以减小包是很不错的;

一、分析APK:

使用Android Studio 2.2 新功能直接能分析APK的大小,双击打开就能看到那些占用APK比例大,方法数等。


这里写图片描述

使用方法:Build -> Analyz APK

通过以上任一工具分析我们知道我们项目中主要是以下文件占用APK大小:

  • classes.dex
    classes.dex是java源码编译后生成的java字节码文件,
  • resources.arsc
    编译后的二进制资源文件,非常多无效资源文件(语言)
  • res
    主要是存放我们的图片资源
  • assets
    主要存放了我们的缓存数据文件,已做最优化压缩,我们考虑能否云端存放。
  • lib
    主要是存放我们的so库,目前我们已经优化了
    既然知道了那些数据导致我们APK体积大,那么我们就着手瘦身了。

二、资源处理

1.极限压缩:

  • assets资源压缩,使用7zip或者lzma压缩方式最高
  • res 图片资源的压缩,使用tinypng优化Android的资源图片,通常我们可以在保证图片不失真的情况下,多压缩几次。目前tinypng已经支持png和jpg图片、.9图的压缩
  • 将非alpha的图转换成jpg形式
    tinypng的链接地址

2.使用WEBP:

WebP是谷歌研发出来的一种图片数据格式,它是一种支持有损压缩和无损压缩的图片文件格式,如果应用支持到Android 4.0+(是指没有alpha,如果有alpha的话,必须支出4.2+),那么我们可以使用WebP格式代替PNG,我们的资源大小能降低50%多。或者有些资源可以使用SVG图片资源更小。

这里提供方便转换的WEBP资源的工具:

3.利用AndResGuard资源压缩打包工具:

微信中的资源混淆工具主要为了混淆资源ID长度(例如将res/drawable/icon.png,png变成混淆为r/s/a.png),同时利用7z深度压缩、对png的存储方式做了改变占用内存更小,大大减少了安装包体积

具体源码与使用方法详细在github中:

https://github.com/shwenzhang/AndResGuard

4.清除你的无用的代码以及资源:

(1)使用命令清除僵尸代码:
Analyze -->Run Inspection by name --> unused resources

可以选择整个工程 这里写图片描述

分析的得到没有用资源的结果:

Analyze -->Run Inspection by name --> unused declaration

分析得到没有用的方法以及类:

这里写图片描述

上面删除之前最好用Alt+F7再确认一下,是否被引用;

这里写图片描述

其中getDefaultProguardFile(‘proguard-android.txt')默认ProGuard设置来自于Android SDK tools/proguard/中的文件夹;

更多的代码减少可以尝试使用相同位置的proguard-android-optimize.txt文件(这里我们又减少了0.5M)proguard-rules.pro是你自定义的proguard规则。

这里写图片描述

resource shrinker 目前还不支持移除定义在values/目录下的资源文件(strings,dimensions,styles,colors),

可以指定特定的语言:

android {
    defaultConfig {
        ...
        resConfigs "zh-rCn", "zh-rHK","zh-rTW"
    }
}

微信android资源混淆打包工具原理:
http://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=208135658&idx=1&sn=ac9bd6b4927e9e82f9fa14e396183a8f#rd
github地址:
https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.md

五、资源动态加载:

我们可以在项目中使用资源动态加载形式,例如:表情,语言,离线库等资源动态加载,减小APK的大小

六、依赖库优化:
  1. 使用更轻量级的库代替,或者优化library的大小,不然自己写更好;
  2. 删除没有应用的库;

七、支持插件化:

未来对于一些独立业务模块,可以做成插件化动态加载,用户需要使用时,只需下载少部分插件。

  1. shrinkResources true 6.52 -- 6.47
  2. Refactor -- Remove Unused Resources 6.47 -- 6.16
  3. resConfigs "zh-rCn","zh-rHK","zh-rTW" 6.47 -- 6.02 ()

相关文章

  • 如何减小APK包

    减小apk的大小,不仅对自己是经验的积累,对公司的用户来说,在下载体验上,小的包下载时间很短,不用等太久,而且省流...

  • APK瘦身 减小APP体积

    APK dex瘦身 APK res瘦身 APK减小语言包 APK 重新打包 PNG转JPG tiny处理png w...

  • Android APP 终极瘦身指南

    前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装;虽然说APK...

  • APK瘦身-是时候给App进行减负了!

    前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装。前一段时间我...

  • 【性能优化】也谈APK瘦身

    前言 APK瘦身即是对APK大小进行压缩策略,减小APK安装包大小,更小的安装包更有助于吸引用户安装。前一段时间我...

  • 安装包性能优化

    安装包性能优化: 1.减小APK大小 2.提高APK运行速率 APK为什么越来越大? 1.随着Android系统版...

  • 如何减小apk体积

    Android开发过程中,不可避免的会遇到apk体积越来越大的问题,但通过有效的方法,也能将其体积控制的很小。ap...

  • Android如何减小APK体积

    一、移除无用资源 android { buildTypes { release { minif...

  • Android面试题汇总

    面试题 单例模式实现方式,优缺点? 如何提升推送到达率? 如何减小Apk体积? 如何优化网络请求? ListVie...

  • APK 瘦身

    为什么要减小 APK 体积 下载 APK 需要流量,流量需要花钱; 安装 APK 需要考虑手机剩余空间 APK 大...

网友评论

    本文标题:如何减小APK包

    本文链接:https://www.haomeiwen.com/subject/bduwdxtx.html