众所周知,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. ios 苹果内购订单验证 --- php实现

    验证函数: function appleVerify($receipt_data,$orderId = 0) { /* * 21000 App Store不能读取你提供的JSON对象 * 21002 ...

  2. 关于IT术语---ip、uv、pv、tps、qps、rps

    涉及到IT方面的几条术语,这里要好好说道说道: 只要和网站打交道,难免会经常听到一系列的转有名词  >>>  系统今日UV多少.PV多少.QPS多少之类的问题.这里就对这些常见的术语 ...

  3. 交叉编译qt5.6

    按照网上的攻略编译QT5.6 https://www.lijingquan.net/2016/07/08/build-kernel-busybox-qt5-6-tslib-imx28/ 出现问题,找不 ...

  4. 20145202马超《Java程序设计》第十周学习总结

    一.网络编程 1.网络概述 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴.在发送和接收数据 ...

  5. 9.4python开发之virtualenv与virtualenvwrapper

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...

  6. Android开发——事件分发机制详解

    0. 前言   转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...

  7. 4 Vue.js 核心理念:数据驱动界面

    1 style样式放在body里面 <style type="text/css"> .ui.segment.container { width:700px; } p { ...

  8. CentOS 6.0 VNC远程桌面配置[转]

    原文出处: http://blog.haohtml.com/archives/12281 谢谢作者. 引言:必须明白:vncserver在调用的时候,会根据你的配置来启用server端的监听端口,端口 ...

  9. WIN8、WIN7访问Windows Server 2003服务器的数据库速度很慢、远程速度很慢的解决方法

    原因是微软在WIN7开始上加入了网络速度限制.在控制台执行以下命令即可解决: netsh interface tcp set global autotuninglevel=disabled

  10. 【Linear Support Vector Machine】林轩田机器学习技法

    首先从介绍了Large_margin Separating Hyperplane的概念. (在linear separable的前提下)找到largest-margin的分界面,即最胖的那条分界线.下 ...