众所周知,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. Java基础——对象和类

    将包含main方法的类称为主类. 变量的作用域是指变量可以在程序中引用的范围. 实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的. 局部变量的声明和使用都在一个方法的内部. 一个类的实例变量 ...

  2. Java8 新API读取文件内容

    import java.io.IOException;import java.nio.charset.Charset;import java.nio.file.Files;import java.ni ...

  3. SpringMVC文件上传——bean的配置【org.springframework.web.multipart.commons.CommonsMultipartResolver】

    一.简介 Spring MVC支持一个通用的多路上传解析器CommonsMultipartResolver,在Spring的配置文件中对CommonsMultipartResolver Bean进行配 ...

  4. perl实现监控linux

    1.使用root用户telnet进入linux系统 2.修改DNS以下两种方法 A.通过setup命令配置dns B.通过在/etc目录下创建resolv.conf文件 3.查看DNS是否配置成功 [ ...

  5. Web安全2--XSS&CSRF

    1.XSS(跨站脚本攻击) 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS ...

  6. FTP使用心得

    1、创建文件夹的函数,一次只能创建一层。 2、没有现成的判断文件夹是否存在的函数,如果文件夹不存在就创建,会报异常。有以下封装好的函数。可以直接调用。 1 2 3 4 5 6 7 8 9 10 11 ...

  7. Python 爬取网页中JavaScript动态添加的内容(二)

    使用 selenium + phantomjs 实现 1.准备环境 selenium(一个用于web应用程测试的工具)安装:pip install seleniumphantomjs(是一种无界面的浏 ...

  8. Kotlin的数据类:节省很多行代码(KAD 10)

    作者:Antonio Leiva 时间:Jan 25, 2017 原文链接:https://antonioleiva.com/data-classes-kotlin/ 在前面的文章中,我们已经见到了类 ...

  9. Mysql忘记root密码怎么办?(已解决)

    为了写这篇文档,假装一下忘记密码!!!! 首先我数据库是正常的,可以使用. root@localhost:~# mysql -uroot -p mysql> mysql> show dat ...

  10. 一些优秀的SLAM博主

    http://blog.csdn.net/u010566411 http://blog.csdn.net/qq_18661939/article/details/51782376 http://www ...