众所周知,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. 关于PHPExcel 基础使用方法

    $dir=dirname(__FILE__);//找到当前脚本所在路径require_once $dir.'/PHPExcel/PHPExcel.php';$objPHPExcel=new PHPEx ...

  2. uniqueidentifier数据类型转换

    cast(id as varchar(36))

  3. 关于修改zeppelin的代码显示

    最近我在修改zeppelin(0.7版本)的源码相关的知识,目前做的工作是修改zeppelin的代码,为了让zeppelin可以可以在页面中显示数据集,并且在其数据库中存储式真实的路径1.如果我们要运 ...

  4. Linux下单机安装部署kafka及代码实现

    技术交流群:233513714 这几天研究了kafka的安装及使用,在网上找了很多教程但是均以失败告终,直到最后想起网络方面的问题最终才安装部署成功,下面就介绍一下kafka的安装部署及代码实现 一. ...

  5. linux压缩和解压缩命令大全--费元星站长

    tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...

  6. laravel5.5用户认证源码分析

    目录 1. 生成相关文件和配置 2. 分析路由文件 3. 以登陆开始为例,分析auth到底是怎么工作的 3.1 分析登录文件 3.2 分析门面Auth. 1. 生成相关文件和配置 快速生成命令 php ...

  7. ironic如何支持部署时按需RAID?

    新浪大神推荐使用element proliant-tools制作deploy image.element proliant-tools会在ipa ramdisk中安装一个rpm包hpssacli(HP ...

  8. Vue2 全局过滤器(vue-cli)

    先看官方简介: 当前组件注册: export default { data () { return {} }, filters:{ orderBy (){ // doSomething }, uppe ...

  9. FTP数字代码的意义

    110 重新启动标记应答.120 服务在多久时间内ready.125 数据链路端口开启,准备传送.150 文件状态正常,开启数据连接端口.200 命令执行成功.202 命令执行失败.211 系统状态或 ...

  10. python中的re模块,常用函数介绍

    参考: http://www.cnblogs.com/tina-python/p/5508402.htm ======== 1,预定义字符集,可以写在字符集[....]中 \d  数字: \D 非数字 ...