最近太忙好久没有写随笔,放假才有空写写随笔。

最近在项目中一直在做包大小优化

随着业务需求的增加,包大小是忍不住的往上涨

为了提高应用市场下载转化率,一直在优化包大小

首先 分析你的apk中占比的主要成分,以及可以减少的部分

一般主要有下面几部分构成你包的大小

1. 资源(主要是图片资源,布局,assets等)

2. so大小

3. 三方库

4. 二方库

5. 业务功能

主要从上面的几部分来进行优化

1.通过压缩图片、重点出一套图片删除其他的图片、简单的图形通过shap代替png

2. 大的背景图片在很少用到页面上使用时,将没有alpha通道的png压缩成jpg,甚至webp格式

3. 通过include减少重复布局文件、资源混淆

4. 编译so的时候通过指定arm和thumb2指令格式减少so大小

5. 删除armeabi-v7a下面的so,甚至可以删除x86下面的so(x86 houdini支持兼容arm指令)

6. 同样的功能用小的三方库代替大的三方库

7. 删除三方库中多余的功能

8. 打包时候过滤三方库中不用的资源

9. 公司的二方库,一般要催促其他的团队优化SDK的大小

10. 删除dex中的垃圾指令、通过混淆来减少dex的大小

11. 用7zip压缩代替普通的zip压缩(注意压缩后会导致raw下面文件找不到,所以过滤文件格式为store的文件不进行压缩)

12. 通过网络下载,动态加载jar,dex, apk的方式来减少包大小(插件化)

如何查看zip包中的文件格式:

unzip -lv WhatsApp-Messenger_v2.12.550pakage.apk | grep .so

介绍一款分析包大小的网站:

https://nimbledroid.com

apk瘦身(包大小优化)的更多相关文章

  1. 39、apk瘦身(转载)

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

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

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

  3. APK瘦身记,如何实现高达53%的压缩效果

    作者:非戈@阿里移动安全 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律. ...

  4. APK瘦身实践

    首发地址:http://www.jayfeng.com/2015/12/29/APK%E7%98%A6%E8%BA%AB%E5%AE%9E%E8%B7%B5/ 因为推广的需要,公司需要把APK的大小再 ...

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

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

  6. APK瘦身记,怎样实现高达53%的压缩效果

    作者:非戈@阿里移动安全,很多其它技术干货.请訪问阿里聚安全博客 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式.关于这个话题事实上是一个老生常谈的题目.不论是公司内部.还是外 ...

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

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

  8. APK瘦身

    APK瘦身 主要从一下三方面来瘦身: 1. Java 源代码 1) ,这方面主要是通过最简洁的代码实现最直接的功能,还有就是提出上线前不必要的java代码,可以使用UCDector进行分析,从而对代码 ...

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

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

随机推荐

  1. ThreadLocal实现线程范围内共享

    线程范围内共享,即是对相同一段代码,在不同的模块调用时使用一份数据,而在另外一个线程中又使用另外一份数据. ThreadLocal使用set方法为一个新的线程增加一条记录,key是各自的线程,valu ...

  2. Twitter数据抓取

    说明:这里分三个系列介绍Twitter数据的非API抓取方法.有兴趣的QQ群交流: BitCrawler网络爬虫QQ群 322937592 1.Twitter数据抓取(一) 2.Twitter数据抓取 ...

  3. 《JAVA与模式》之策略模式

    <JAVA与模式>之策略模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法 ...

  4. java获取指定时间的年月日

    作者:Night Silent链接:http://www.zhihu.com/question/35650798/answer/63983440来源:知乎著作权归作者所有,转载请联系作者获得授权.1. ...

  5. mfc线程

    1.生成线程 方式1. HANDLE hthread; //线程句柄 hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadFunc,NU ...

  6. GMT时间转换

    /// <summary> /// GMT时间转成本地时间 /// </summary> /// <param name="gmt">字符串形式 ...

  7. 通过数据库和EasyUI的combobox级联实现省市区三级联动

    1.新建一个web项目 2.因为这里用到了数据库所以我们在lib目录导入Hibernate的jar包.fastjson.jar包及数据库jar包 3.同样导入EasyUI的组件配置,并在新建的html ...

  8. [ZJOI2006]物流运输

    1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5999  Solved: 2473[Submit][Stat ...

  9. jQuery的domReady

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. js 定时器的使用。 setInterval()

    我需要实现的功能是:点击发送按钮,会出现 “已发送60s后可点击重发”,并且,60s 这个数字是随时变化的,60,59,58,57....0,然后再次返回到 发送 按钮. 类似效果,可参考  360首 ...