众所周知,APP包体的大小,会影响推广的难度,用户不太喜欢下载太大的APP,同类型同等功能的APP中往往是包体小的更受用户的青睐,所以降低包体是一项非常必要的事情,也是最近公司的APP需要降低包体,所以总结下自己知道的降低包体的方法。

一. 压缩图片

基本每个APP都需要用到相当多的图片,而这些图片在包体中了占据了不少的空间,特别是有些图片大小到达上百k的,加几张就吃不消,所以要对图片进行一定程度的压缩,这里推荐一个网站 --- TinyPng,TinyPNG 是一个图片压缩网站,在上面压过的图基本都能小很多,而且压缩后的图片跟原图基本看不出区别,至少我的dog eye是看不出。使用很简单,把图片拖到网站上指定区域,或者点击按钮到自己存放图片的目录选择图片即可。

这里为了突显下压缩效果选了张非常大的图片,正常情况下是不可能把这么大的图片放在项目里的。可以看到压缩率高达82%,图片大小从4.5M降低到只有800kb。

二. 使用webp图片格式

具体可以看下webp探寻之路,里面有对webp的详细介绍,这里简单说下webp其实是谷歌开发的一种新的图片格式,它跟PNG有点相似,最大优点在于压缩率高,支持有损和无损压缩,但是Android4.0及以上才支持webp格式,4.0以下想使用webp就需要其他辅助支持库了。

推荐一个在线转webp格式的网址,能立刻看到压缩后的图像和压缩前的图像的差别,还能按照需要选择压缩质量。

三. 使用Android Lint分析去除无用资源

项目中总是会有些资源明明没有被使用却一直放在那没有被及时清理,而随着产品的迭代,项目中无用的资源可能会越来越多,包体自然就会变大很多。对于这些无用资源就应该及时的删除,当然,总不可能一个个找,这时候就可以用lint了,下面以Android Studio为例说下怎么利用lint清除无用资源。

总的来说就两步:

1. Analyze - -> Run Inspection by Name  -->  输入 unused resource   之后敲下回车Android Lint就会开始分析项目中哪里存在着无用资源

 

2. 根据Android Lint给出的分析结果,确认资源的使用情况,确认为无用资源后(一般来说全局搜索下资源名,除了在R.java中外其他地方都没引用就是无用资源)删除即可

四. 使用AndResGuard

AndResGuard是微信开源出来的一个打包工具,它的使用相当简单,而且支持直接在gradle里面设置打包参数和命令行打包,使用AndResGuard打包,包体基本都能降低0.6M -- 1M左右,降低包体的原理是因为其采用了7z极限压缩,将项目里使用到的资源文件,图片极限压缩,同时还会利用超短路径,将文件信息和签名信息变短(例如res/drawable/emoji.png会缩短成r/d/e)。而关于AndResGuard详细的说明可以查看下面两个链接,里面有它的原理和使用方法的说明。

github主页

原理说明
 
注意:AndResGuard是压缩了resources.arsc文件的,而resources.arsc即使在安装之后仍会被频繁读取,因此,压缩该文件会造成一定程度的性能损失。不过腾讯内部众多APP都使用了这个工具,应该是没什么问题的,担心性能损耗的话,可以在AndResGuard的配置中设置不压缩resources.arsc文件,但是包体就不会降低那么多了,需要自己权衡。
另外还得提一下,由于AndResGuard使用了超短路径,对整个项目都造成了影响,需要全功能覆盖测试来检测各功能有没有失效,如果有资源是用getIdentifier()的方式来获取的,就必须将资源id加到AndResGuard的白名单中,避免被混淆,否则app运行的时候会找不到该资源。个人推荐的做法是项目中用到的第三方资源文件都加入到白名单中,因为我们不清楚这些资源的使用方式,而项目里面自己导入的资源就自己按照使用方法的不同来决定是否加入白名单。

Android APK瘦身方法小结的更多相关文章

  1. Android APK 瘦身 - JOOX Music项目实战

    导语 JOOX Music是腾讯海外布局的一个音乐产品,2014年发布以来已经成为5个国家和地区排名第一的音乐App.东南亚是JOOX Music的主要发行地区,由于JOOX Music所面对的市场存 ...

  2. Android APK瘦身之Android Studio Lint (代码审查)

    ******** ******** 第一部分: 瘦身内容介绍 ******** ******** 项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此 ...

  3. Android Apk 瘦身大法

    原文地址: https://mp.weixin.qq.com/s/XS0tuLgTfyp4rW4h69wyQQ 一, 我们在多人开发项目 或者 遗留项目中开发时,会有些自己没用到的资源文件,但是自己也 ...

  4. Android APK瘦身之webp图片

    webp格式是谷歌推出的一种有损压缩格式,这种图片格式相比png或者jpg格式的图片损失的质量几乎可以忽略不计,但是压缩后图片的体积却比png或者jpg要小很多.亲测一个100kb的png图片经过we ...

  5. android apk瘦身之 图片压缩 tinypng

    参考地址: http://blog.csdn.net/jy692405180/article/details/52409369 http://www.tuicool.com/articles/BraI ...

  6. android apk瘦身

    1.在gradle使用minifyEnabled进行Proguard混淆的配置,可大大减小APP大小 通过Build.gradle进行配置 2.删除无用的Resource文件. 这个和上面的肯定不一样 ...

  7. 39、apk瘦身(转载)

    本文转自::Android开发中文站 » 关于APK瘦身值得分享的一些经验 从APK的文件结构说起 APK在安装和更新之前都需要经过网络将其下载到手机,如果APK越大消耗的流量就会越多,特别是对于使用 ...

  8. Android性能优化系列之apk瘦身

    Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率 ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

随机推荐

  1. mysql8.0 忘记root密码

    先打开一个cmd:net stop mysql //关闭mysql服务mysqld --shared-memory --skip-grant-tables//跳过登录密码在不关闭第一个CMD的情况下打 ...

  2. 笔记-scrapy-深入学习-sheduler

    笔记-scrapy-深入学习-sheduler 1.      scheduler.py source code:scrapy/core/scheduler.py: 1.1.    初始化的开始 在分 ...

  3. sql server inser相关处理(添加一条,一次添加多条,Bulk插入多条)

    1,insert语句 insert into 表一(字段一,字段二,字段三) value(值一,值二,值三) 2,sql 插入多条语句,其中完整值之间用逗号分割 insert into 表一(字段一, ...

  4. python语法re.compile模块介绍

    1. re模块是正则表达式模块,re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象.可以实现更有效率的匹配. impor ...

  5. js常用框架

    JS常用框架:jQuery.Prototype.MooTools 参考:w3cshool jQuery jQuery 是目前最受欢迎的 JavaScript 框架. 它使用 CSS 选择器来访问和操作 ...

  6. 详解zabbix2.2.2安装部署(Server端篇)

    今天开始安装zabbix.zabbix需要LNMP或者LAMP环境.环境的搭建不在本章范围内. LNMP环境配置 Linux安装:http://www.osyunwei.com/archives/10 ...

  7. fragment中的WebView返回上一页

    public final class Text1Fm extends Fragment { static WebView mWeb; private View mContentView; privat ...

  8. .net发展-关注

    文章:用.net core 写后端—— c++外的另一种选择? 文章:

  9. hdu1712 分组背包 ACboy needs your help

    ACboy needs your help Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  10. Win10 WSL Ubuntu18.04 编译安装MySQL5.7

    ---恢复内容开始--- 在win10 商店中选择 ubuntu18.04 下载地址 http://dev.mysql.com/downloads/mysql/ wget https://cdn.my ...